假设我有以下列表:
['id-1213fsr53', 'WAITING', '54-81-24-40', 'world', 'id-343252sfsg', 'WAITING', '54-41-06-143', 'hello']
列表可以按以下格式细分为元组:
(id, status, ip-address, name)
所以,在另一个检查状态,我需要通过这4个元素元组迭代该列表, 像:
for s in status:
(id, status, ip-address, name) = s # (s is a 4 element list)
# increment s by 4, and continue the loop
如何在python
中实现此类行为?
答案 0 :(得分:5)
最简单的方法是使用grouper
itertools
recipe:
def grouper(iterable, n, fillvalue=None):
"Collect data into fixed-length chunks or blocks"
# grouper('ABCDEFG', 3, 'x') --> ABC DEF Gxx
args = [iter(iterable)] * n
return izip_longest(fillvalue=fillvalue, *args)
你可以使用它:
for s in grouper(status, 4):
请注意,如果使用status
解压缩其中一个元组值和原始数据,则会出现问题。
答案 1 :(得分:1)
使用从zip()
文档分组元素的方法:
data = ['id-1213fsr53', 'WAITING', '54-81-24-40', 'world', 'id-343252sfsg', 'WAITING', '54-41-06-143', 'hello']
for s in zip(*[iter(data)]*4):
(id, status, ip_address, name) = s
您还可以在迭代中执行解包:
for id, status, ip_address, name in zip(*[iter(data)]*4):
# do something
以下是zip()
调用正在执行的允许此类迭代的内容:
>>> zip(*[iter(data)]*4)
[('id-1213fsr53', 'WAITING', '54-81-24-40', 'world'), ('id-343252sfsg', 'WAITING', '54-41-06-143', 'hello')]
答案 2 :(得分:0)
试试这个:
for index in range(0, len(status), 4):
(id,status,ip-address,name) = s[index:index+4]