簡體   English   中英

刪除列表中的數字的倍數:

[英]Removal of multiples of a number on a list:

我有兩個,我有這個列表,我將如何從該列表中刪除數字2的倍數並更新它?

10 [2, 3, 4, 5, 6, 7, 8, 9, 10] 2

假設您有一個列表l和一個數字n您可以使用列表解析從l刪除所有n倍數:

l = [i for i in l if i%n]

if i%n在這里與寫if i%n != 0 ,並且n除以i iff i%n==0

方法:

使用發電機

想到的第一個選擇之一是使用發電機。 生成器將迭代序列,並測試當前元素是否可被n整除。 這使您可以獲得更通用的解決方案:

def filter_by_multiple(seq, n):
    for i in seq:
        if i % n:
            yield i

用法:

>>> filter_by_multiple([2, 3, 4, 5, 6, 7, 8, 9, 10], 2)
<generator object filter_by_multiple at 0x000000374ED30258>
>>> list(filter_by_multiple([2, 3, 4, 5, 6, 7, 8, 9, 10], 2))
[3, 5, 7, 9]
>>> 

使用生成器表達式

雖然上述解決方案很好,但使用生成器表達式可以進一步縮短。 生成器表達式與列表推導類似,但與它們不同,它們返回生成器迭代器而不是列表。

用法:

>>> l = [2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> list(el for el in l if el % 2)
[3, 5, 7, 9]
>>> 

使用 filter()

在Python的許多內置函數中,有一個用於過濾列表,名為filter() 使用filter()的常用方法是傳入要用於過濾列表的函數,然后傳遞要過濾的實際列表。 在您的情況下,您希望過濾掉不是兩個的倍數的每個元素:

用法:

>>> l = [2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> list(filter(lambda x: x % 2, l))
[3, 5, 7, 9]
>>> 

使用列表理解

雖然以上所有都是過濾列表的好方法,但最明顯和規范的可能是使用列表理解。 在你的情況下,你的列表理解,很簡單。

用法:

>>> l = [2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> [el for el in l if el % 2]
[3, 5, 7, 9]
>>>

暫無
暫無

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

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