【问题标题】:How can I filter a list by different conditions?如何按不同条件过滤列表?
【发布时间】:2019-07-30 10:43:23
【问题描述】:

我写了以下代码:

list_1 = [5, 18, 3]
list_2 = []
for element in list_1:
    if element < 0:
        list_2.append(element)
    elif element % 9 == 0:
        list_2.append(element)
    elif element % 2 != 0: 
        list_2.append(element)
    else:
        print('No number is valid')
print(list_2)

问题在于,这会返回一个至少满足三个条件之一的数字列表。

我想要的结果是满足所有三个条件的数字列表。我怎样才能做到这一点?

【问题讨论】:

  • @MartijnPieters and,实际上。他们说他们希望元素满足所有 3 个条件。
  • @Aran-Fey:确实,我在那里读的还不够远。
  • @MartijnPieters 是的!但问题是使用or,获得的返回是具有至少满足其中一个条件的数字的列表。我想知道是否可以做相反的事情,获取同时满足所有条件的数字的列表。
  • @Amartin:or 的反义词是 and
  • 我已经稍微整理了一下这个问题,但是我不确定你什么时候想要打印“No number is valid”,所以我把那一点省略了。如果它很重要,请随时将其放回原处。

标签: python python-3.x list if-statement logical-and


【解决方案1】:

尝试列表理解:

list_2 = [i for i in list_1 if i<0 and i%9==0 and i%2 !=0]

【讨论】:

  • 嗨,如果orand 更改为@Martijn Pieters 所建议的,这将有效
【解决方案2】:

使用单个 if 语句来组合所有条件

if element<0 and element%9==0 and element%2!=0 :
    list2.append(element)

【讨论】:

  • ups,抱歉。但这个想法很重要 :D,懒得看他的案子太久
  • @kalehmann:我还没读到那么远,我错过了那里的附录。
【解决方案3】:

您也可以使用函数filter()&amp; 代替AND| 代替OR):

list(filter(lambda x: x < 0 & x % 9 == 0 & x % 2 != 0, list_1)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-03
    • 2019-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-28
    • 1970-01-01
    相关资源
    最近更新 更多