我有一个列表,其中我知道某些项目是不需要打印的,而我正在尝试通过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)
答案 0 :(得分:2)
使用enumerate()
可以获取索引,然后可以进行检查。
for i, x in enumerate(chart):
if i not in {0, 2, 4}:
print(x)
答案 1 :(得分:0)
另一个:
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)
答案 2 :(得分:0)
尽管我支持@Barmar的建议,但我认为该解决方案在charts
中包含非唯一条目的情况下存在一个漏洞。例如
charts = ['milk', 'soda', 'milk', 'cookies', 'yogurt', 'rug']
以下代码段将解决charts
的非唯一条目,并提供问题的要求。
discard_index = [0, 2, 4, 9]
# Keep only unique items in discard_items list
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)
详细讨论
您可能要基于以下条件选择或删除元素:
- 索引列表:[0,2,4,]
- 项目列表:['cookies','牛奶','rug',]
如果它带有项目列表,则可以提供要丢弃的项目列表,其中某些项目甚至可能不是charts
的一部分。根据索引检查有效性的条件语句要求您事先了解索引。
因此,无论您提供什么内容,都可以处理
for
循环:索引列表或项目列表。
+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)
将错过第二次出现的milk
。但是,如果您列出要删除的唯一项目,则可以解决此问题。除了@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)