我希望串列中只有不是 1 [3,4,5] 的數字,并將 1 放入另一個串列中。下面是我寫的代碼
a_list=[1,1,1,1,3,4,5]
one_list=[]
a_list[:] = [a if a != 1 else one_list.append(a) for a in a_list]
print(a_list)
print(one_list)
這是 a_list 的輸出 - [None, None, None, None, 3, 4, 5]
我想要的 a_list 輸出 - [3, 4, 5]
uj5u.com熱心網友回復:
關于你問題的第一部分,正確的理解是:
[e for e in a_list if e != 1]
對于您想要做的事情,理解并不是真正正確的工具,請使用經典回圈:
a_list=[1,1,1,1,3,4,5]
list1 = []
list2 = []
for e in a_list:
if e == 1:
list1.append(e)
else:
list2.append(e)
輸出:
>>> list1
[1, 1, 1, 1]
>>> list2
[3, 4, 5]
您想做什么以及為什么不應該:
你試圖用理解來做的是:
a_list=[1,1,1,1,3,4,5]
one_list = []
a_list[:] = [e for e in a_list if (True if e != 1 else one_list.append(e))]
a_list, one_list
但是,您不應該這樣做,因為它不會阻止創建臨時串列,并且它不是明確的/pythonic。
獎勵:使用 itertools
from itertools import tee, filterfalse
def partition(pred, iterable):
"Use a predicate to partition entries into false entries and true entries"
# partition(is_odd, range(10)) --> 0 2 4 6 8 and 1 3 5 7 9
t1, t2 = tee(iterable)
return filterfalse(pred, t1), filter(pred, t2)
a_list=[1,1,1,1,3,4,5]
a_list, one_list = map(list, partition(lambda x: x == 1, a_list))
uj5u.com熱心網友回復:
發生這種情況是因為list.append()is in-placefunction 和 return None。你可以做你想做的如下:
就地操作是直接改變內容的操作。
a_list =[1,1,1,1,3,4,5]
one_list = [a for a in a_list if a==1]
a_list = [a for a in a_list if a!=1]
print(a_list)
print(one_list)
輸出:
[3, 4, 5]
[1, 1, 1, 1]
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/351687.html
下一篇:反轉包含2個以上元素的元組
