[英]Flatten Nested Tuples in a List of a List of Nested Tuples More Pythonically
因此,我生成了一個嵌套元組列表(國際象棋移動驗證器的向量)。
old_v = [[((4, 1, 'P', 'e2'), 1), ((4, 2, '1', 'e3'), 0), ((4, 3, '1', 'e4'), 0), ((4, 4, '1', 'e5'), 0), ((4, 5, '1', 'e6'), 0), ((4, 6, 'q', 'e7'), -1)]]
在閱讀了此處和此處的文檔后,我仍然無法弄清楚如何在不重寫整個元組的情況下僅折疊每個子列表中的元組,如下所示:
new_v = [[(a[b][0][0], a[b][0][1], a[b][0][2], a[b][0][3], a[b][1]) for b in range(0, len(a))] for a in old_v]
print(new_v)
我想知道是否有更 Pythonic 的方式來做到這一點。
[(a[b][0][0], a[b][0][1], a[b][0][2], a[b][0][3], a[b][1]) for b in range(0, len(a))]
所有對b
的引用都是a[b]
,因此您可以直接遍歷元素而不是通過索引:
[(b[0][0], b[0][1], b[0][2], b[0][3], b[1]) for b in a]
如果你有好的名字,元組解包可以使b[0]
和b[1]
更具可讀性和意義:
[(move[0], move[1], move[2], move[3], idk) for move, idk in a]
最后,可以使用 splat 在元組文字中擴展可迭代對象:
[(*move, idk) for move, idk in a]
# or [move + (idk,) for move, idk in a] if you prefer
全面的:
new_v = [[(*move, idk) for move, idk in a] for a in old_v]
這個怎么樣?
l = [((4, 1, 'P', 'e2'), 1), ((4, 2, '1', 'e3'), 0), ((4, 3, '1', 'e4'), 0), ((4, 4, '1', 'e5'), 0), ((4, 5, '1', 'e6'), 0), ((4, 6, 'q', 'e7'), -1)]
def flatten(list_):
return [(*tup, i) for (tup, i) in list_]
>>> flatten(l)
[(4, 1, 'P', 'e2', 1), (4, 2, '1', 'e3', 1), (4, 3, '1', 'e4', 1), (4, 4, '1', 'e5', 1), (4, 5, '1', 'e6', 1), (4, 6, 'q', 'e7', 1)]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.