对数组中的子数组中的元组使用条件

2024-04-25 09:32:13 发布

您现在位置:Python中文网/ 问答频道 /正文

A = [[(1,2,0),(3,4,0),(5,6,0)],[(7,8,1),(9,10,1),(11,12,1)],[(13,14,0),(15,16,0),(17,18,0)]]

我在尝试对给定子数组中每个元组的第三个元素求和,然后对其应用某些条件时遇到问题。i、 e.上述输出应为:

B = ['X',(7,8,9,19,11,12),'X']

这是我目前正在做的。请注意,元组的数量会有所不同,但每个元组中的元素数量是恒定的。你知道吗

i = 0
while i < len(A):
    if sum([X[2] for X in A[i]]) == 0:
        B.append('X')
    else:
        arr = [x[0:2] for x in A[i]]
        B.append(list(itertools.chain.from_iterable(arr)))
    i = i+1 

我所关注的关于多个语句的具体问题已经解决,其形式如下:

A = [[(1,2,0),(3,4,0),(4,5,0)],[(6,7,1),(8,9,1)],[(10,11,0)]]
B = ['X' if not sum(t[2] for t in sub) and len(sub) >= 2 else tuple(itertools.chain.from_iterable(t[:2] for t in sub)) for sub in A]
print B

['X', (6, 7, 8, 9), (10, 11)]

Tags: infrom元素chainfor数量lenif
2条回答

您可以使用列表:

['X' if not sum(t[2] for t in sub) else tuple(i for t in sub for i in t[:2])
 for sub in A]

演示:

>>> A = [[(1,2,0),(3,4,0),(5,6,0)],[(7,8,1),(9,10,1),(11,12,1)],[(13,14,0),(15,16,0),(17,18,0)]]
>>> ['X' if not sum(t[2] for t in sub) else tuple(i for t in sub for i in t[:2])
...  for sub in A]
['X', (7, 8, 9, 10, 11, 12), 'X']

或者,如果您真的还想使用itertools.chain()

from itertools import chain

['X' if not sum(t[2] for t in sub) else tuple(chain.from_iterable(t[:2] for t in sub))
 for sub in A]

同样,作为演示:

>>> from itertools import chain
>>> ['X' if not sum(t[2] for t in sub) else tuple(chain.from_iterable(t[:2] for t in sub))
...  for sub in A]
['X', (7, 8, 9, 10, 11, 12), 'X']

如果只想将每个子列表中的前两个元组用于输出,则需要明确说明:

arr = [x[0:2] for x in A[i][:2]]

编辑出于某种原因,你现在显然不想要前两个。其余的仍然存在:


更一般地说,这里的列表理解会更简洁:

 B = [tuple(itertools.chain.from_iterable(t[:2] for t in l)) 
      if sum(t[2] for t in l) else 'X' for l in A]

这给了我你想要的结果:

>>> B
['X', (7, 8, 9, 10, 11, 12), 'X']

相关问题 更多 >