!!!注意:前万不能把变量命名为list,否则系统里的list()函数就失效了!!!这时候要清楚该自定义的“list”变量del list
前缀:
二进制 0b
十进制 0o
十六进制 0x
将整数转化成二进制字符串
1、你可以自己写函数采用 %2 的方式来算。
binary = lambda n: '' if n==0 else binary(n/2) + str(n%2)
binary(5)
#'101'
2. 采用 python 自带了方法 bin 函数,比如 bin(12345) 回返回字符串 '0b11000000111001', 这个时候在把0b去掉即可:
bin(12345).replace('0b','')
#'11000000111001'
2.1 八进制
a = 10 #声明数字,默认十进制
b = oct(a).replace('0o','')
print(b , type(b))
2.2 十六进制
b = hex(a).replace('0x','')
2.3 将二进制数转成2,8,16进制数
a = '011'
print(int(a,base=2))
print(int(a,base=8))
print(int(a,base=16))
3、也可以采用字符串的 format 方法来获取二进制:
"{0:b}".format(12345)
#'11000000111001'
将字符串转数字
[int(i) for i in list]#转整型
[float(i) for i in list]#转浮点型
[long(i) for i in list]#转长整型
int(i, base)
long(i,base)
取list里规律取(按表达式)某些值
首先了解下一般取列表怎么按索引取值,也就是列表的切片:
list[i:j] 就是从列表的索引 i 到索引j 个的值;列表的索引第一位是从0开始的
list[i:j:3] 取i ~ j 但步长为3;也就是取每次索引位置开始+3的值
#取奇数位
list[::2 ] 这里的 i j 我们省略的话就是默认数组最开头到结尾
#取偶数位
list[1::2] 从第二个数开始数,步长为2
将键盘输入读进:
注意:line.split是把你输入的一行默认按空格分割成一个个字符串,形成一个list
键盘输入:[1,2,3],[4,5,6]
从标准输入读入一行文本,默认的标准输入是键盘:
line=input()
x=line.split(']')
#['[1,2,3', ',[4,5,6', '']
a=[int(i) for i in x[0].split('[')[1].split(',')]
# [1,2,3]
b=[int(i) for i in x[1].split('[')[1].split(',')]
# [4,5,6]
#键盘输入数组:2*2*3
第一行数组维度(所以第一行单独处理);
第二行是数组第一行,
第三行是数组第二行。
2 2
1 0 0 0.5 0.5 0
0.0.2 0.8 0 1 0
###方法一:利用for line in sys.stdin:a=line.split()循环,键盘一次性输入多行,并且切换到下一行仅需要像往常一样enter即可。
#1. 首先输入你要输入的矩阵的行数和列数
import sys
import numpy as np
line=input()
dim=line.split()
dim=[int(i) for i in dim]
data=np.zeros([dim[0],dim[1],3])
#2. 然后一行一行键盘输入数据
m=0
for line in sys.stdin:(注意,对于for语句在命令行里的输入,如果要结束输入for语句的代码,需要两次Enter)
a=line.split()
x=[float(i) for i in a]
PD=x[0::3]
PR=x[1::3]
PS=x[2::3]
for i in range(len(PD)):
data[m,i]=[PD[i],PR[i],PS[i]]
m=m+1
print(data)
#ctrl + d 结束输入
###方法二:利用对input().split(' ')进行for循环
#键盘输入注意:键盘一次性输入多行,并且切换到下一行仅需要像往常一样enter即可。
###从键盘输入一个二维数组
#1. 首先输入你要输入数组的
m = int(input())行数
#加入我们这里输入m=3
#2. 建立一个空的二维数组
grid = [[] for i in range(m)]
#[[], [], []]
for i in range(m):
line = input().split(' ')
for j in range(len(line)):
grid[i].append(int(line[j]))
将字符list转成数字list
方式一:
numbers = [ int(x) for x in numbers ]
方式二: python3.x,map返回的是map对象,当然也可以转换为List:
numbers = list(map(int, numbers))
map函数
对list里每个元素都进行某个函数的处理
list(map(func, list))#注意,map函数返回一个map对象,需要转为list
def func(x):
return x*x
list(map(func, [1,2,3]))
#[1,4,9]
函数list
a=[1,3,7]
min(a)
max(a)
sum(a)
正序排序:sorted(a)等同于sorted(a,reverse=False)
倒序排序:sorted(a,reverse=True)
均值:average_a = np.mean(a)
中值:median_a = np.median(a)
#找出a最大值的位置
a.index(max(a))
压栈和弹栈
a=[5,7,32,4]
a.pop(index)#注意:pop函数的参数是index,是弹出指定某个位置的值
a.pop()等同于a.pop(-1),即默认弹出列表里最后一个值
a.append(value)#注意:append函数的参数是value,是在尾部压入某个值
随机抽样
- pandas对数据框实现随机抽样:随机抽某些行/列
df.sample(n=None, #指抽取的样本量
frac=None,#指定抽取的样本比例
replace=False, #是否有放回抽样,默认无放回(对于不平衡数据抽样时,replace=False)
weights=None, #指定样本抽中的概率,(默认等概率抽样)
random_state=None,#指定随机抽样的随机种子,可以使得每次抽样的种子一样,每次抽样的结果一样
axis=None#是选择抽取数据的行还是列。axis=0时是抽取行,axis=1时是抽取列)
- 在List中随机抽取n个元素:使用random包
import random
#1. 从seq序列中(可以是列表,元组,字符串)随机取一个元素返回
random.choice(seq):
#2. 从population中进行K次随机选取,每次选取一个元素(注意会出现同一个元素多次被选中的情况)
random.choices(population,
weights=None, *,
cum_weights=None,
k=1)
#weights是相对权重值,population中有几个元素就要有相对应的weights值,
#cum_weights是累加权重值,例如,相对权重〔10, 5, 30,5〕相当于累积权重〔10, 15, 45,50〕。在内部,在进行选择之前,相对权重被转换为累积权重,因此提供累积权重节省了工作。
#返回一个列表。
#3. sample函数
random.sample(population, k)
#从population中取样,一次取k个,返回一个k长的列表。(元素之间不会重复)
#4. 或者直接 random.shuffle
random.shuffle(seq)
seq[0:n]
#直接打乱原序列,然后取前n个
#注意:random.shuffle(a)函数无返回值,是在list本身上对其打乱,random.shuffle(a)执行后,list a本身就被打乱了
将字符串分成成一个个字符
list('11000000')
['1', '1', '0', '0', '0', '0', '0', '0']
list便捷函数
0. list的copy(注意:是在python3里有用)
li1=[1,2,3,4,5,6]
li2=li1.copy()
1. list去重
(1)np.unique(['1', '1', '0', '0', '0', '0', '0', '0'])
(2)list(set(['1', '1', '0', '0', '0', '0', '0', '0']))
2. list排序:
(1)np.sort(['1', '1', '0', '0', '0', '0', '0', '0'])
(2)list.sort(cmp=None, key=None, reverse=False)
* 注意这里是对list本身进行排序,无返回值!!!!!!
a=['1', '1', '2', '5', '0', '0', '3', '0']
a.sort(reverse = True)#无返回值!!!!!!!
a
#['5', '3', '2', '1', '1', '0', '0', '0']
3. list运算
数学运算:
sum(list)
np.mean(a)
np.median(a)
多个列表合并
l1 = [1, 2, 3]
l2 = [4, 5, 6]
l3 = l1 + l2
print(l3)# [1, 2, 3, 4, 5, 6]
extend和append的区别
l1 = [1, 2, 3]
l2 = [4, 5, 6]
l3 = l1 + l2
print(l3)# [1, 2, 3, 4, 5, 6]
* append(listi) 作为参数的list将以list的形式添加到原来的列表中,该方法没有返回值
* extend(listi) 作为参数的list将全部以子元素的方式添加到原来的列表中,该方法没有返回值
l1.append(l2)
print(l1) # [1, 2, 3, [4, 5, 6]]
l1.extend(l2)
print(l1) # [1, 2, 3, [4, 5, 6], 4, 5, 6]
字典dict
dic={'C':1,"D":2,'E':3}
dic.items()
#dict_items([('C', 1), ('D', 2), ('E', 3)])
list(dic.items())
#[('C', 1), ('D', 2), ('E', 3)]
dic.keys()
#dict_keys(['C', 'D', 'E'])
list(dic.keys())
#['C', 'D', 'E']
dic.values()
#dict_values([1, 2, 3])
list(dic.values())
#[1, 2, 3]
{key:value for value,key in dic.items()} #key在后,value在前
#{1: 'C', 2: 'D', 3: 'E'}
数学运算:
np.log(2)
统计数量collections.Counter
from collections import Counter
list = [59, 138, 13, 1367, 158, 35, 572, 43, 10, 34, 572, 572, 44, 12, 1345, 7, 21, 59, 10]
counter = Counter(list)
counter
#Counter({59: 2,
# 138: 1,
# 13: 1,
# 1367: 1,
# 158: 1,
# 35: 1,
# 572: 3,
# 43: 1,
# 10: 2,
# 34: 1,
# 44: 1,
# 12: 1,
# 1345: 1,
# 7: 1,
# 21: 1})
counter[59]#2
counter[10]#2
###统计list里每个元素的数量:
stats={key:counter[key] for key in list(set(li))}
#stats
#{1345: 1,
# 34: 1,
# 35: 1,
# 7: 1,
# 138: 1,
# 43: 1,
# 10: 2,
# 13: 1,
# 44: 1,
# 12: 1,
# 21: 1,
# 1367: 1,
# 59: 2,
# 572: 3,
# 158: 1}
stats[59] #2
网友评论