为什么这个for循环不适用于整个列表?

2024-04-26 14:36:21 发布

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

我正在尝试为我正在做的python课程构建我的第一个游戏。 如何让这个for循环遍历整个列表,将每个值更改为单词“bull”? 谢谢您!你知道吗

输入:

a = [1,2,3,4]
b = [1,2,3,4]

for x in a:
    if x in b:
        b[x] = 'bull'

print (a)
print (b)

输出:

[1, 2, 3, 4]
[1, 'bull', 3, 'bull']

Tags: in游戏列表forif单词课程print
3条回答

如果x1,那么b[x] = 'bull'将写入x[1],但是a列表中1的位置实际上是a[0]。你知道吗

您想要的是使用a值的索引来操作b中的相应值:

for index, value in enumerate(a):
    if b[index] == value:
        b[index] = 'bull'

如果确实要替换b中的值,而不考虑其索引,则需要首先找到要操作的索引:

for value in a:
    try:
        index = b.index(value)
    except ValueError:
        continue
    b[index] = 'bull'

或者,更简短地说,使用列表理解:

b = ['bull' if x in a else x for x in b]

可以使用^{}检查两个列表对应索引处的元素是否相同。你知道吗

a = [1,2,3,4]
b = [1,2,3,4]

for x, y in zip(a, b):
    if x == y:
        b[x-1] = 'bull'

print (a)  # [1, 2, 3, 4]
print (b)  # ['bull', 'bull', 'bull', 'bull'] 

注意:列表索引从0开始。所以,需要将bull分配给bx-1索引。你知道吗

最后,如果您需要一个1行

b = ['bull' if x == y else y for x, y in zip(a, b)]

这是一个比它最初出现时更有趣的问题。你知道吗

for x in a:

将迭代1,2,3,4。你知道吗

if x in b:
   b[x] = 'bull'

检查1、2、3、4是否分别位于b,并将b[x]设置为bull。 由于Python是基于零的索引,因此简单的猜测可以看到:

b = [1,'bull','bull','bull']
Traceback (most recent call last):
  File "<stdin>", line 2, in <module>
IndexError: list assignment index out of range

相反,你会看到:

b = [1, 'bull', 3, 'bull']

有什么好处?什么是零基索引?你知道吗

基于零的索引仅仅意味着,如果你想要某个东西的第一个元素,你可以在索引0处调用它。换句话说,如果a = [1,2,3,4],那么a[1]给出2a[0]给出1。令人困惑的是,在一些计算机科学家中存在着这样做是否是最好的方法的争论。有些语言,比如Fortran和Julia,有一个基于索引的索引,所以像你尝试做的事情实际上可以在那里工作。你知道吗

现在回到问题上来:让我们一个循环一个循环。你知道吗

在第一个循环中,x = 1,所以x in b计算结果为Trueb[1] = 'bull'计算结果为:b = [1,'bull',3,4]。你知道吗

在第二个循环中,x = 2但是x in b的计算结果是False!记住b = [1,'bull',3,4],所以b中不再有2,它跳过了元素赋值!你知道吗

在第三个循环中,3 in bTrue,所以现在是b[3] = 'bull'b = [1,'bull',3,'bull']。你知道吗

在第四个循环中,b中没有4,所以什么也没有发生。你知道吗


相反,对于您要实现的目标,您可以通过以下两种方式之一来实现:

for (i,x) in enumerate(a):
    if x in b:
        b[i] = 'bull'

在这个方法中,i被初始化为0,每个循环增加一个。所以i将跨越:0,1,2,3。非常适合零基索引!你知道吗

另一种方法是:

for x in a:
    if x in b:
        b[x-1] = 'bull'

x是1时,x-1给你0,记住b[0] = 1。你知道吗

相关问题 更多 >