5
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,我需要从列表中检索属性的所有三个部分。

4

6 回答 6

15

您可以使用itertools文档中的“grouper”配方执行此操作:

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)]
于 2012-06-11T21:53:37.437 回答
3

尝试这个:

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

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

于 2012-06-11T21:57:54.660 回答
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)]

来自这个答案。

于 2012-06-12T00:58:08.743 回答
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]
>>> 
于 2012-06-11T21:55:07.600 回答
2

不是很pythonic,但你可以使用:

for i in range(0, len(a), 3):
    print a[i]
    print a[i+1]
    print a[i+2]
于 2012-06-11T21:55:21.420 回答
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
于 2012-06-11T21:55:35.747 回答