python 数据使用小技巧

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/willba/article/details/82748897

一,从列表中 中筛选数据
例如:获取集合中大于某个条件的数

lists = [-1,-2,-4,-5,-6,0,1,4,9]
# 找出大于0的数
str = []
for number in lists:
    if number > 0:
        str.append(number)
print(str)
#[1, 4, 9]

#列表式
str = [x for x in lists if x >0]
print(str)

#Pyhton2.7 返回列表,Python3.x 返回迭代器对象,即对象再可以转化位列表
newStr = filter(lambda x: x >0,lists)
print(list(newStr))

二:对元组中每个元素重新命名,获取其值
例如:

name = 0
age = 1
sex = 2
number = 3

#定义变量取代列表中的索引值
lists = ("yuanyang","19","nan","139")
#利用lists[name]取代lists[0]
print(lists[name])
#yuanyang


#利用标准库中的namedtuple对元组重命名
from collections import namedtuple
student = namedtuple("students",["name","age","sex","number"])
str = student("zhangsan","20","nan","9898")
print(str)
#students(name='zhangsan', age='20', sex='nan', number='9898')
print(str.name)
#zhangsan

三:统计序列中 元素出现的频率
例如:

list = [12,5,6,4,6,5,5,7,8,4,3,1,2,6]
#根据key生成一个新的字典
str = dict.fromkeys(list,0)
print(str)
#{12: 0, 5: 0, 6: 0, 4: 0, 7: 0, 8: 0, 3: 0, 1: 0, 2: 0}
for number in list:
    str[number] += 1
print(str)
#{12: 1, 5: 3, 6: 3, 4: 2, 7: 1, 8: 1, 3: 1, 1: 1, 2: 1}


#利用标准库中的Counter来统计数据
from collections import Counter
#找到每个字母出现的次数
newStr = Counter(list)
print(newStr)
#Counter({5: 3, 6: 3, 4: 2, 12: 1, 7: 1, 8: 1, 3: 1, 1: 1, 2: 1})
#出现频率最高的3位
counterStr = newStr.most_common(3)
print(counterStr)
#[(5, 3), (6, 3), (4, 2)]

四:根据字典中值的大小,对字典的项排序
例如:

from random import randint
#创建一个字典
str = {x: randint(60,100) for x in "xyzabc"}
#{'x': 96, 'y': 94, 'z': 76, 'a': 79, 'b': 88, 'c': 60}
print(str)
#将字典转化为一个新的元组
newStr = zip(str.values(),str.keys())
#sorted 默认是对key值进行排序
print(sorted(newStr))
#[(60, 'b'), (67, 'y'), (69, 'x'), (69, 'z'), (78, 'c'), (94, 'a')]


#第2种方式 通过自定义规格排序规则
newSortStr = sorted(str.items(),key=lambda x:x[1])
print(newSortStr)

五:查询字典中出现的公共键
例如:

from random import randint,sample
#从多个字典中提取出公共的键的元素
#sample(序列a,n)
#功能:从序列a中随机抽取n个元素,并将n个元素生以list形式返回。

str = sample("abcdefg",randint(3,6))
print(str)
#['f', 'a', 'd', 'g', 'b']
s1 = {x: randint(1,4)for x in str}
print(s1)
#{'a': 4, 'c': 2, 'e': 4}
s2 = {x: randint(3,6)for x in str}
s3 = {x: randint(4,7)for x in str}
newduple = []
for x in s1:
    if x in s2 and x in s3:
        newduple.append(x)
print(newduple)

#第2种方式
dict1.viewkeys()&dict2.viewkeys()&dict3.viewkeys() 这个前提是需要知道哪些字典参与

#第3种方式
 map(dict.viewkeys,[dict1,dict2,dict3]) 求得字典的viewkeys集合
 print reduce(func,map(dict.viewkeys,[dict1,dict2,dict3])) 通过求交集的方式求得公共键

六:让字典保持有序
例如:

from collections import OrderedDict
#得到一个有序的空字典
dicts = OrderedDict()
dicts["angle"] = (1,90)
dicts["dimu"] = (3,78)
dicts["baby"] = (2,80)
for x in dicts:
     print(x)

七:实现用户的历史记录功能
例如:

#标准库collections 中的duque,是一个双端循环队列
from collections import deque
#新的队列中 只保留最近出现的3个数据
newList = deque([],3)
newList.append(1)
newList.append(2)
newList.append(3)
print(newList)
#eque([1, 2, 3], maxlen=3)

八,列表的反向迭代
例如:

lists = [1,2,3,4,5]
newList = lists[::-1]
print(newList)
#[5, 4, 3, 2, 1]

#list.reverse() 该方法没有返回值,但是会对列表的元素进行反向排序。
lists.reverse()
print(lists)
#[5, 4, 3, 2, 1]

#reversed返回的是一个迭代器对象的内存地址
str = reversed(lists)
print(list(str))
#[5, 4, 3, 2, 1]
'''

九:for循环迭代多个可迭代对象
例如:并行迭代  串行迭代
#利用zip将多个可迭代对象合并 每次迭代返回一个元组 并行迭代
chinese = [1,2,3,4]
math = [6,2,3,4]
englist = [1,8,3,4]
total = []
for c,m,e in zip(chinese,math,englist):
    total.append(c+m+e)
print(total)
#[8, 12, 9, 12]

#串行迭代 使用标准库中的itertools.chain 它能将多个可迭代对象连接
from  itertools import chain
for s in chain(chinese,math,englist):
    if s >5:
        print(s)
        #6,8

猜你喜欢

转载自blog.csdn.net/willba/article/details/82748897
今日推荐