我有两个,我有这个列表,我该如何从该列表中删除数字2的倍数并更新它?
10 [2, 3, 4, 5, 6, 7, 8, 9, 10] 2
答案 0 :(得分:2)
假设您有一个列表l
和一个号码n
,您可以使用列表理解从n
中移除l
的所有倍数:
l = [i for i in l if i%n]
在此处撰写if i%n
与撰写if i%n != 0
相同,n
划分i
iff i%n==0
答案 1 :(得分:1)
使用生成器
首先想到的选择之一是使用发电机。生成器将迭代序列,并测试当前元素是否可被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()
的常用方法是传入要用于过滤列表的函数,然后传递要过滤的实际列表。在您的情况下,您希望过滤掉不是2的倍数的每个元素:
用法:
>>> 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]
>>>