在list中筛选:
方法一:[x for x in list if x>10] # 效率更高
方法二:filter(lambda x :x>10,list) # lambda 定义一个匿名函数
在dict中筛选:
{k: v for k, v in dict.items() if v > 85} # 后面添加条件
在set中筛选:
{s for s in set if s>10}
# set() 函数创建一个无序不重复元素集,可进行关系测试,删除重复数据,还可以计算交集、差集、并集等。
# 语法:class set([iterable])
方法一:宏定义方法
student = ('litaifa','40','male')
NAME, AGE, SEX = xrange(3)
print student[NAME]
方法二:命名元组方法 namedtuple
collections.namedtuple(typename, field_names, verbose=False, rename=False)
返回一个命名元祖子类typename,其中参数的意义如下:
typename,:此元组的名称; field_names:
元祖中元素的名称(类似于c结构体中的age等),此字段有多种表达方式,见例子;
rename:如果元素名称中含有python的关键字,则必须设置为rename=True,具体见下面; verbose:默认就好;
实例:
import collections
#其中field_names 有多种表达方式,如下
student=collections.namedtuple('student','name age sex') # 三种方法,选其中一种
student=cpllections.namedtuple('student',['name','age','sex'])
student=cpllections.namedtuple('student','name,age,sex')
spark=student(name='sunYang',age=20,sex='male')
print(spark) # student(name='sunYang', age=20, sex='male')
print("spark's name is %s" % spark.name) # spark's name is sunYang
print("%s is %d years old %s" % spark) # sunYang is 20 years old male
list排序:
x=[1,3,5,7,10,5,3]
方法一
x.sort(lambda a, b: a - b) # 可以自定义,此例表示按升序排列
方法二
x.sort() # 系统自带的排序规则,也可以,x.sort(reverse=True) 倒序排序,sort会改变列表的排序,如果要新生成列表,可以用sorted方法
dict按值排序
d={‘name’+str(k):randint(60,100) for k in xrange(1,6)}
方法一:
sort = sorted(d.items(),key=lambda e:e[1]) # 按值排序
方法二:
dic_tup=zip(dic.itervalues(),dic.iterkeys()) # zip方法是将两人列表拼成一个元组列表
sorted(dic_tup,reverse=True) # 对于元组的排序规则是,先按照第一个值排序,然后再依次往后
from collections import Counter
import re
f=open('django.txt') # 打开文件
txt=f.read()
f.close()
txt_list = re.split(r'\W+',txt) # 将文本转化为列表,以非文字字符作为分隔符
print Counter(txt_list).most_common(10) # 统计列中元素出现的频度,并返回频度最高的前10个单词
from random import randint, sample
baller = 'abcdefg' # 假设有7名球员
dic1 = {b: randint(1, 4) for b in sample(baller, randint(4, 6))} # 随机生成一场球进球环员及进环数
dic2 = {b: randint(1, 4) for b in sample(baller, randint(4, 6))}
dic3 = {b: randint(1, 4) for b in sample(baller, randint(4, 6))}
方法一:循环判断
list = []
for k in dic1:
if k in dic2 and k in dic3:
list.append(k)
方法二:
m = map(dict.viewkeys, [dic1, dic2, dic3])
r = reduce(lambda x, y: x & y, m)
from time import time
from random import randint
from collections import OrderedDict
stu = list('ABCDEFGH') # 定义A B...8个学生的列表
l = len(stu)
start = time() # 记录开始时间
dic = OrderedDict() # 定义一个排序字典,顺序接添加顺序排列
for i in xrange(0, l):
raw_input() # 阻塞函数,等待用户输入
p = stu.pop(randint(0, l - i-1)) # 随机移除列表中元素,并返回该元素
end = time()
print p, i + 1, end - start, # print 后面为逗号,表示打印后,不换行
dic[p]=(i+1,end-start) # 对排序字典进行赋值
print
print '-'*20 # 表示重复打印20个'-'
for k in dic:
print k,dic[k]
from random import randint
from collections import deque
import pickle
# 猜数字游戏
def guest(t, n): # 判断数字是否准确
if t == n:
print "you are correct"
return True
if t < n:
print "your digital is litter"
else:
print "your digital is bigger"
return False
if __name__ == "__main__":
n = randint(0, 100)
p = deque([], 5) # deque是一个双端循环队列,队列的长度为5
while False:
dig = raw_input("please input digital : ")
if dig.isdigit():
dig = int(dig)
p.append(dig) # 将数字添加到队列,当队列中多于5个时,最先添加的将被挤出
if guest(dig, n):
f = open('digital', 'w')
pickle.dump(p, f) # 将python对象写入到文件中
f.close()
break
elif dig == 'exit':
break
elif dig == 'h':
print list(p) # 打印队列
f = open('digital', 'r') # 打开文件
p = pickle.load(f) # 从文件中读取python对象
f.close()
print list(p)