我有以下玩具功能:
def foo(a):
return [a 5]
我正在運行以下代碼:
my_lst = [foo(x) for x in range(10) if x%2 == 0]
得到:
[[5], [7], [9], [11], [13]]
但需要:
[5,7,9,11,13]
但我想得到一個簡單的串列,而不是串列的串列。itertools.chain.from_iterable(my_lst)
如果沒有串列理解,我怎么能做到這一點?最佳做法是什么?在這種情況下是 itertools 還是串列理解?
請指教。
我努力了:
[j[0] for j in [foo(x) for x in range(10) if x%2 == 0]]
我應該這樣做還是有更好的方法?
uj5u.com熱心網友回復:
使用串列理解,它使用兩個for
回圈完成:
my_lst = [subx for x in range(10) if x%2 == 0 for subx in foo(x)]
此外,如果您有一個元素串列的串列,您可以在串列使用后“轉置” zip
:
bad_lst = [foo(x) for x in range(10) if x%2 == 0]
[my_lst] = zip(*bad_lst)
uj5u.com熱心網友回復:
除了 Laernes 答案,您還可以使用itertools
as :
list(itertools.chain(*[foo(x) for x in range(10) if x%2 == 0]))
或者
list(itertools.chain.from_iterable([foo(x) for x in range(10) if x%2 == 0]))
更多選項在這里:
uj5u.com熱心網友回復:
你的函式應該回傳一個數字,而不是一個串列:
def foo(a):
return a 5
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/507962.html
標籤:python-3.x 列表 列表理解 迭代工具