编写if语句以避免某些列表项的更好方法是什么?

2024-05-19 00:39:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个清单,我知道有些项目是不需要打印的,我正试图通过if语句做到这一点。。。但是它变得非常复杂,那么有没有办法在if语句中包含多个索引而不重写整个语句呢。 像这样的东西?: if x == chart[0,2,4]

我举了一个例子:

chart = ['milk', 'soda', 'cookies', 'yogurt', 'rug']

for x in chart:
    if x == chart[0] or x == chart[2] or x == chart[4]:
        continue
    else:
        print(x)

Tags: or项目inforifchart语句例子
3条回答

另一个:

chart = ['milk', 'soda', 'cookies', 'yogurt', 'rug']

excluded = {chart[i] for i in (0, 2, 4)}
for x in chart:
    if x not in excluded:
        print(x)

使用enumerate()这样就可以得到索引,然后就可以检查了。在

for i, x in enumerate(chart):
    if i not in {0, 2, 4}:
        print(x)

尽管我支持@Barmar的建议,但我认为当charts中有非唯一项时,该解决方案存在一个循环漏洞。例如

charts = ['milk', 'soda', 'milk', 'cookies', 'yogurt', 'rug']

下面的代码将处理charts的非唯一项,并提供问题所要求的内容。在

^{pr2}$

Detailed Discussion

您可能希望根据以下内容选择或删除元素:

  1. a list of indices: [0, 2, 4, ]
  2. a list of items: ['cookies', 'milk', 'rug', ]

如果它有一个项目列表,您可以提供一个要丢弃的项目列表,其中有些项目甚至可能不是{}的一部分。基于索引检查有效性的条件语句要求您事先知道索引。在

So, what if you could process the for loop irrespective of what is provided: list of indices or list of items.
+ user_discard_items = ['cookies', 'milk', 'rug', 'bananas']
+ user_discard_index = [0,2,4,9]

注意并不是所有的项目(bananas)和所有索引(9)都在列表中,chart。在

chart = ['milk', 'soda', 'cookies', 'yogurt', 'rug']
user_discard_items = ['cookies', 'milk', 'rug', 'bananas']
user_discard_index = [0,2,4,9]

如果您想根据索引列表放弃:user_discard_index,那么解决方案是@Barmar建议的。在

discard_index = user_discard_index.copy() 
for i, x in enumerate(chart):
    if i not in discard_index:
        print(x)

但是,如果charts具有非唯一项,则可能会导致问题,例如:

charts = ['milk', 'soda', 'milk', 'cookies', 'yogurt', 'rug']

在这种情况下,如果您对删除milk更感兴趣,那么指定discard_index = (0, 2, 4)将错过第二次出现的{}。但是,如果您列出要删除的唯一项的列表,则可以解决此问题。除了@Barmar所建议的之外,下面的代码段处理这个场景。在

# Keep unique items for the list: discard_index
discard_index = user_discard_index.copy()
discard_items = set([chart[x] for x in discard_index if x<len(chart)])
for x in enumerate(chart):
    if x not in discard_items:
        print(x)

请注意,如果用户提供了要删除的项目列表(而不是索引),则上面的代码也可以工作。请参阅下面的代码块。在

# Keep unique items for the list: discard_items
discard_items = user_discard_items.copy()
discard_items = set(discard_items)
for x in enumerate(chart):
    if x not in discard_items:
        print(x)

相关问题 更多 >

    热门问题