通过列表迭代3

时间:2012-06-11 21:51:22

标签: python list

a = [3,5,8,3,9,5,0,3,2,7,5,4]
for o in a[::3]:
    print o

这让我得到第一个和每3个项目。 3,3,0,7

有没有办法可以检索下两个项目?

a = [3,5,8,3,9,5,0,3,2,7,5,4]
for o in a[::3]:
  if o == 0:
    print o
    print o + 1
    print o + 2

输出0 3 2

我知道这不正确,但也许你可以看到我正在尝试做的事情。基本上,我有很长的属性列表,每个属性有三个部分,parent_id,property_type和property_value,我需要从列表中检索属性的所有三个部分。

6 个答案:

答案 0 :(得分:14)

你可以使用"石斑鱼"来自itertools documentation的食谱:

def grouper(n, iterable, fillvalue=None):
    "grouper(3, 'ABCDEFG', 'x') --> ABC DEF Gxx"
    args = [iter(iterable)] * n
    return izip_longest(fillvalue=fillvalue, *args)

示例:

>>> a = [3, 5, 8, 3, 9, 5, 0, 3, 2, 7, 5, 4]
>>>  list(grouper(3, a))
[(3, 5, 8), (3, 9, 5), (0, 3, 2), (7, 5, 4)]

答案 1 :(得分:2)

>>> a = [3,5,8,3,9,5,0,3,2,7,5,4]
>>> for pos in xrange(0, len(a), 3):
...     print a[pos:pos+3]
... 
[3, 5, 8]
[3, 9, 5]
[0, 3, 2]
[7, 5, 4]
>>> 

答案 2 :(得分:2)

不是非常pythonic,但你可以使用:

for i in range(0, len(a), 3):
    print a[i]
    print a[i+1]
    print a[i+2]

答案 3 :(得分:2)

试试这个:

array = [3,5,8,3,9,5,0,3,2,7,5,4]
for i in xrange(0, len(array), 3):
    a, b, c = array[i:i+3] # partition the array in groups of 3 elements
    print a, b, c

它有效,因为(如问题中所述)每个属性恰好有三个部分。

答案 4 :(得分:2)

如果您知道每个部分恰好有三个部分,那么简单地说:

a = [3,5,8,3,9,5,0,3,2,7,5,4]

print zip(*[iter(a)] * 3)

输出:

[(3, 5, 8), (3, 9, 5), (0, 3, 2), (7, 5, 4)]

来自this回答。

答案 5 :(得分:1)

x = a[::3]
y = a[1::3]
z = a[2::3]
grouped = zip(x,y,z)

for p1,p2,p3 in grouped:
    print p1 + p2 + p3