簡體   English   中英

雙循環列表理解

[英]list comprehension with double loops

我是編程新手。我的列表理解有問題。我需要將一個列表划分為大小為 5 的元組,我的代碼運行良好,但如果我輸入了一個列表列表,我不知道如何在列表理解中插入一個雙循環。我希望有人可以幫助我。 這是我的代碼:

big_list1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
x = 5
bot = [tuple(big_list1[i: i + x])for i in range(0, len(big_list1), x)]

這是 output:

 bot=[(1, 2, 3, 4, 5), (6, 7, 8, 9, 10), (11, 12, 13, 14, 15)]

但是,如果我有這樣的列表列表:

 my_list=[[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15], [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], [1, 2, 3, 4, 5]]

我想要這個:

res=[[(1, 2, 3, 4, 5),(6, 7, 8, 9, 10),(11, 12, 13, 14, 15)], [(1, 2, 3, 4, 5),(6, 7, 8, 9, 10)], [(1, 2, 3, 4, 5)]]

我很困惑,因為循環中有“范圍”,我不知道如何進行嵌套循環。

定義為 function:

def split_in_tuples(input_list, tuple_length):
    return [tuple(input_list[i: i + tuple_length]) for i in range(0, len(input_list), tuple_length)]

然后你可以使用它:

big_list1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
split_in_tuples(big_list1, 5)

[(1, 2, 3, 4, 5), (6, 7, 8, 9, 10), (11, 12, 13, 14, 15)]

那么對於您的列表列表,您可以:

my_list=[[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15], [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], [1, 2, 3, 4, 5]]
[split_in_tuples(sublist, 5) for sublist in my_list]

這使:

[[(1, 2, 3, 4, 5), (6, 7, 8, 9, 10), (11, 12, 13, 14, 15)], [(1, 2, 3, 4, 5), (6, 7, 8, 9, 10)], [(1, 2, 3, 4, 5)]]

如果你真的想使用列表推導,你可以這樣做:

[[tuple(elem[i: i + x]) for i in range(0, len(elem), x)] for elem in my_list]

也許最終的代碼不是那么“酷”,無論如何你的代碼離解決方案不遠,你必須添加外部循環(在我的解決方案中,我使用了相同命名的相同示例)也許很有用

my_list=[[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15], [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], [1, 2, 3, 4, 5]]
x = 5
[[tuple(big_list1[i: i + x])for i in range(0, len(big_list1), x)] for big_list1 in my_list]

# [[(1, 2, 3, 4, 5), (6, 7, 8, 9, 10), (11, 12, 13, 14, 15)],
 [(1, 2, 3, 4, 5), (6, 7, 8, 9, 10)],
 [(1, 2, 3, 4, 5)]]

這就是你想要的。

暗示

更一般地說,嵌套 lc 需要一點提示。 假設您需要嵌套 2 個列表理解,第一種方法是:

c = ['ab']
[a for a in b for b in c]

但這不起作用NameError: name 'b' is not defined因為 python 的解析順序,

但以正確的方式重新排序,從右到左

[a for b in c for a in b]

按預期運行。

如果你想使用列表理解,你可以這樣做(給定my_listx來自所述問題):

[[tuple(l[i: i + x]) for i in range(0, len(l), x)] for l in my_list]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM