亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Pythonic 從一個列表彈出到另一個列表

Pythonic 從一個列表彈出到另一個列表

MMMHUHU 2023-08-15 16:35:39
我有兩個清單a = [1,2,3]b = []如果滿足特定條件,我想從列表 a 中移動一個元素。a = [1,3]b = [2]下面的代碼顯示了一個示例,但是,我想在單個循環內執行此操作。我如何更有效地做到這一點?a = [1,2,3]b = []pop_list = []for i in range(len(a)):    if a[i] == 2:        print("pop:", a[i])        pop_list.append(i)for i in range(len(pop_list)):    b.append(a.pop(pop_list[i]))# Reset pop_listpop_list=[]理想情況下,我不會生成新列表 b。
查看完整描述

4 回答

?
揚帆大魚

TA貢獻1799條經驗 獲得超9個贊

一對列表推導式即可完成這項工作:一個用于選擇 所需的元素b,另一個用于從中刪除它們a


b = [i for i in a if i == 2]

a = [i for i in a if i != 2]


查看完整回答
反對 回復 2023-08-15
?
慕容森

TA貢獻1853條經驗 獲得超18個贊

您可以對filter兩者itertools.filterfalse使用相同的過濾函數:


from itertools import filterfalse


a = [1,2,3]

b = []


list(filterfalse(lambda x: x == 2, a))

list(filter? ? ?(lambda x: x == 2, a))

[1, 3]

[2]



查看完整回答
反對 回復 2023-08-15
?
寶慕林4294392

TA貢獻2021條經驗 獲得超8個贊

如果該元素x存在,您可以將其從 中刪除b并將其附加到a.


a = [1, 2, 3]

b = []

x = 2


def remove_append(a, b, x):

    if x in a:

        a.remove(x)

        b.append(x)


remove_append(a, b, x)

print(a)

print(b)

輸出:


[1, 3]

[2]


查看完整回答
反對 回復 2023-08-15
?
慕尼黑8549860

TA貢獻1818條經驗 獲得超11個贊

我們必須遍歷所有元素,但是,您可以應用此技巧在一個循環中添加到適當的列表:


(追加到循環比刪除任意位置的元素更有效)



a = [1,2,3]


condition_false, condition_true = [], []

for v in a:

    # Add to the right list

    (condition_false, condition_true)[v == 2].append(v)


# [1, 3]

print(condition_false)


# [2]

print(condition_true)


查看完整回答
反對 回復 2023-08-15
  • 4 回答
  • 0 關注
  • 207 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號