列表中筛选元素
data = [1,5, -3, -2, 6, 0, 9]
res = []
for x in data:
if x >= 0:
res.append(x)
print(res)
from random import randint
data = [randint(-10, 10) for _ in range(10)]
print(data)
filter(lambda x: x >= 0, data)
[x for x in data if x >= 0]
字典中筛选元素
dic = {x: randint(60, 100)for x in range(1, 21)}
print(dic)
d = {k: v for k, v in dic.items() if v > 90}
print(d)
集合中筛选元素
s = set(data)
se = {x for x in s if x % 3 == 0}
print(se)
在元祖中加入标签, 使程序的可读性更高
M1:
NAME, AGE , SEX , EMAIL = range(4)
student = ('Jim', 16, 'male', 'jim8721@gmail.com')
print(student[NAME])
M2:
from collections import namedtuple
s = namedtuple('student',['name', 'age', 'sex', 'email'])
s1 = s('Jim', 16, 'male', 'jim8721@gmail.com')
print(s1)
print(s1.name)
统计序列中元素出现的频率
from random import randint
from collections import Counter
data = [randint(0, 21) for _ in range(30)]
c = dict.fromkeys(data, 0)
for x in data:
c[x] += 1
print(c)
c1 = Counter(data)
print(c1)
print(c1.most_common(3))
import heapq
from random import randint
nums = [randint(0, 30) for _ in range (20)]
print(heapq.nlargest(3, nums))
print(heapq.nsmallest(3, nums))
根据字典中值的大小来对字典进行排序
from random import randint
data = [randint(10, 50) for _ in range(20)]
print(sorted(data))
M1:
from random import randint
dic = {x: randint(60, 100)for x in 'xyzabc'}
#此时只对键值进行排序
#print(sorted(dic))
#使用zip函数
print(dic.keys())
print(dic.values())
print(sorted(zip(dic.keys(), dic.values())))
M2:
from random import randint
dic = {x: randint(60, 100)for x in 'xyzabc'}
print(sorted(dic.items(), key = lambda x: x[1]))
如何快速找到多个字典中的公共键(key)
from random import randint, sample
s1 = {x: randint(1,4) for x in sample('abcdefg', randint(3,6))}
print(s1)
s2 = {x: randint(1,4) for x in sample('abcdefg', randint(3,6))}
print(s2)
s3 = {x: randint(1,4) for x in sample('abcdefg', randint(3,6))}
print(s3)
res = []
for k in s1:
if k in s2 and k in s3:
res.append(k)
print(res)
如何让字典保持有序
from random import randint, sample
from collections import OrderedDict
from time import time
d = OrderedDict()
player = list('ABCDEFGH')
start = time()
for i in range(8):
input()
p = player.pop(randint(0, 7 - i))
end = time()
print(i + 1, p, end - start)
d[p] = (i + 1, p, end - start)
print(d[p])
print()
print('-'*20)
for k in d:
print(k, d[k])
实现历史记录功能
from collections import deque
from random import randint
N = randint(0, 100)
history = deque([], 5)
def guess(k):
if k == N:
print('Right')
return True
elif k < N:
print('%s is less-than N' % k)
else:
print('%s is greater-than N' % k)
return False
while True:
line = input('Please input a number: ')
if line.isdigit():
k = int(line)
history.append(k)
if guess(k):
break
elif line == 'history' or 'h?':
print(list(history))
字典中通过某个关键字排序
rows = [
{'fname': 'Brian', 'lname': 'Jones', 'uid': 1003},
{'fname': 'David', 'lname': 'Beazley', 'uid': 1002},
{'fname': 'John', 'lname': 'Cleese', 'uid': 1001},
{'fname': 'Big', 'lname': 'Jones', 'uid': 1004}
]
from operator import itemgetter
rows_by_fname = sorted(rows, key = itemgetter('fname'))
rows_by_uid = sorted(rows, key = itemgetter('uid'))
rows_by_lfname = sorted(rows, key = itemgetter('fname', 'lname'))
print(rows_by_fname)
print(rows_by_uid)
print(rows_by_lfname)