我在python中有一个列表,其中包含以下示例内容:
['mark', 29, 'american', 'james', 45, 'british', 'arthur', 76, 'australian']
从模式中可以清楚地看出,列表中的第一项是名称,第二项是年龄,第三项是国籍。 迭代它的最有效方法是将for循环中的元素分开。
我是python的新手,并不知道这样做的最佳方法。
for i in len(0, len(my_list):
name =
age =
nationality =
答案 0 :(得分:4)
尝试这个方便的模式:
from itertools import izip
iters = [iter(my_list)] * 3 # change 3 to number of items in each group
for name, age, nationality in izip(*iters):
print name, age, nationality
答案 1 :(得分:3)
循环执行3:
for i in xrange(len(my_list)/3):
name, age, nationality = my_list[3*i:3*i+3]
答案 2 :(得分:3)
实现新类型迭代的最佳方法是编写生成器。它们允许您封装迭代样式并将其与代码的其余部分分开:
def by_threes(seq):
it = iter(seq)
while True:
yield next(it), next(it), next(it)
for a, b, c in by_threes(range(20)):
print a,b,c
打印:
0 1 2
3 4 5
6 7 8
9 10 11
12 13 14
15 16 17
如果你需要灵活地对序列进行tuplize,你可以使用它:
def by_chunks(seq, n):
"""Yield lists [a,b,..] from `seq`, each list having `n` elements."""
l = []
for i, x in enumerate(seq):
l.append(x)
if (i % n) == n-1:
yield l
l = []
答案 3 :(得分:3)
使用zip
(或itertools.izip
)的步骤索引:
>>> l = ['mark', 29, 'american', 'james', 45, 'british', 'arthur', 76, 'australian']
>>> for name, age, nationality in zip(l[::3], l[1::3], l[2::3]):
... print (name, age, nationality)
...
('mark', 29, 'american')
('james', 45, 'british')
('arthur', 76, 'australian')
答案 4 :(得分:1)
这样做的一种方法是:
names = mylist[0::3]
ages = mylist[1::3]
nationalities = mylist[2::3]
然后你可以迭代为
for name in names:
print name
etc.