If/Else 列表定义中的语句?

If/Else Statements Inside a list definition?

我使用 Python 很长时间了,但我最近发现了一种创建和遍历列表的新方法:

l = [x for x in range(0, 10)]

这会生成一个从 0 到 9 的列表。它非常有用,而且比我之前做的要简单得多:

l = []

for x in range(0, 9):
    
    l.append(x)

既然我了解了这种做事方式,我已经将它用于很多事情,而且效果很好。唯一的问题是,我有时想要另一种选择。例如,如果我有一个全是 1 和 0 的列表:

import random

l = [random.randint(0, 1) for i in range(0, 10)]

我想获取此列表并再次迭代,仅根据 if else 语句做两件不同的事情:

for idx, item in enumerate(l):

    if item == 1:

        l[idx] = 'A'

    else:

        l[idx] = 'B'

我知道只创建一个包含 'A''B' 随机实例的列表会更容易,但这只是一个示例,它不适用于我的用例。我将如何使用我创建列表的新方法来做到这一点?我知道如何在末尾添加一个 if 语句:

l = [x for x in range(0, 10)]
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
l = [x for x in range(0, 10) if i != 7]
# [0, 1, 2, 3, 4, 5, 6, 8, 9]

但是我的 else 语句呢?顺便说一下,这种创建列表的方式叫什么?如果我知道的话,我可能已经能够在网上找到答案了。

您可以利用 Python 的 ternary operator:

l = ['A' if i == 1 else 'B' for i in l]

你想做的是列表理解,它确实很有帮助!

这 post 回答了您的问题:if/else in a list comprehension

在你的例子中,你想做的是:

L = ['A' if random.randint(0, 1)==1 else 'B' for i in range(0, 10)]

您使用的创建列表的方法称为“列表生成器”。同样,还有一个字典生成器。

要解决您的问题,您需要在列表生成器中添加条件:

import random

new_list = [random.randint(0, 1) for i in range(0, 10)]
another_new_list = ['A' if number == 1 else 'B' for number in new_list]

好的,让我们清理一些东西。首先,这种创建列表的方法称为列表理解

现在,让我们谈谈如何实现A'sB's的列表(通过列表理解):

import random

# This creates a list of 1's and 0's
l = [random.randint(0, 1) for i in range(0, 10)]
# [1, 1, 1, 0, 0, 1, 1, 1, 1, 0]

# This creates a list of A's and B's
l = ['A' if num == 1 else 'B' for num in l]
#['A', 'A', 'A', 'B', 'B', 'A', 'A', 'A', 'A', 'B']

如何正常进行(没有列表理解)?

import random

l = []
for x in range(0, 10): # This should be 10 instead of 9 to get 10 values. 
    l.append(random.randint(0,1))
# l = [0, 1, 0, 1, 1, 0, 0, 0, 0, 1]

for idx, item in enumerate(l): # You need to use `enumerate()` to get index, value
    if item == 1:
        l[idx] = 'A'
    else:
        l[idx] = 'B'
# l = ['B', 'A', 'B', 'A', 'A', 'B', 'B', 'B', 'B', 'A']