Python序列元素解压全面介绍
程序员文章站
2022-05-29 16:49:18
...
Python序列元素解压全面介绍
1、将序列元素解压到单独变量
1.1、简单元组解压
p = (4,5)
x,y = p
print(x,y)
输出: 4 5
1.2、复杂数据结构解压
data = ['Apple',100,4.5,(2021,1,28)]
name,weight,price,date = data
print(name,weight,price,date)
输出:Apple 100 4.5 (2021, 1, 28)
name,weight,price,(year,month,day) = data
print(name,weight,price,year,month,day)
输出:Apple 100 4.5 2021 1 28
**注意:**当变量个数与序列元素数量不匹配时,将出错
1.3、字符串解压
a,b,c = 'abc'
print(a,b,c)
输出:a b c
1.4、忽略变量
有时需要忽略一些变量,则可以通过下划线来实现。
name,_,price,_ = data
print(name,price)
输出:Apple 4.5
2、从任意长度可遍历序列解压元素
record = ['Jenson','[email protected]','+86-020-12345678','+86-13700000001']
name,email,*phones = record
print(name,email,phones)
输出:Jenson [email protected] ['+86-020-12345678', '+86-13700000001']
2.1、获取最后一个元素和第一个元素
*head,tail = [1,2,3,4,5,6,7,8,9,0]
print(tail)
first,*last = [1,2,2,3,4,5,6]
print(first)
输出:
0
1
2.2、过滤元素
fruits = [('apple',4.5),('pear',3.8),('banana',2.5),('grape',12.3)]
for name,*args in fruits:
if name == 'apple':
print('price of apple = ',args)
输出:price of apple = [4.5]
2.3、忽略多个元素
data = ['Apple',100,4.5,(2021,1,28)]
name,*args,(year,_,_) = data
print(name,year)
输出:Apple 2021
2.4、递归调用
def sum(values):
head,*tail = values
return head + sum(tail) if tail else head
value = sum([1,2,3,4,5,6,7,8,9,0])
print(value)
输出45
3、保留最后N个元素
保留最后N个元素,可以使用collection.deque来实现
from collections import deque
def keep_last_n_elem(values,pattern,history=5):
previous = deque(maxlen=history)
for value in values:
if value in pattern:
yield value,previous
previous.append(value)
with open('datas/somefile.txt') as f:
for line,prev in keep_last_n_elem(f,'python'):
print(len(prev))
for pline in prev:
print(pline,end='')
print(line,end='')
print('-'*20)
4、查找最大和最小N个元素
可以通过使用heapq的nlargest和nsmallest实现。
import heapq
nums = [1, 8, 2, 23, 7, -4, 18, 23, 42, 37, 2]
print(heapq.nlargest(3, nums))
print(heapq.nsmallest(3, nums))
输出:
[42, 37, 23]
[-4, 1, 2]
对于复杂的数据,同样可以实现
portfolio = [
{'name': 'IBM', 'shares': 100, 'price': 91.1},
{'name': 'AAPL', 'shares': 50, 'price': 543.22},
{'name': 'FB', 'shares': 200, 'price': 21.09},
{'name': 'HPQ', 'shares': 35, 'price': 31.75},
{'name': 'YHOO', 'shares': 45, 'price': 16.35},
{'name': 'ACME', 'shares': 75, 'price': 115.65}
]
cheap = heapq.nsmallest(3, portfolio, key=lambda s: s['price'])
print(cheap)
expensive = heapq.nlargest(3, portfolio, key=lambda s: s['price'])
print(expensive)
输出:[{'name': 'YHOO', 'shares': 45, 'price': 16.35}, {'name': 'FB', 'shares': 200, 'price': 21.09}, {'name': 'HPQ', 'shares': 35, 'price': 31.75}]
[{'name': 'AAPL', 'shares': 50, 'price': 543.22}, {'name': 'ACME', 'shares': 75, 'price': 115.65}, {'name': 'IBM', 'shares': 100, 'price': 91.1}]
下一篇: MYSQL学习笔记2 (连接查询)
推荐阅读
-
python实现获取序列中最小的几个元素
-
Python 序列化 pickle/cPickle模块使用介绍
-
Python pickle类库介绍(对象序列化和反序列化)
-
Python cookbook(数据结构与算法)找出序列中出现次数最多的元素算法示例
-
【python cookbook】找出序列中出现次数最多的元素
-
Python cookbook(数据结构与算法)从序列中移除重复项且保持元素间顺序不变的方法
-
利用Python找出序列中出现最多的元素示例代码
-
Python过滤序列元素的方法
-
Python cookbook(数据结构与算法)筛选及提取序列中元素的方法
-
Python cookbook(数据结构与算法)将名称映射到序列元素中的方法