Python 列表、字典、集合操作

列表中筛选元素

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)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值