2024-04-26 14:36:21 发布
网友
我正在尝试为我正在做的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']
如果x是1,那么b[x] = 'bull'将写入x[1],但是a列表中1的位置实际上是a[0]。你知道吗
x
1
b[x] = 'bull'
x[1]
a
a[0]
您想要的是使用a值的索引来操作b中的相应值:
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分配给b的x-1索引。你知道吗
0
bull
x-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[x]
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]给出2,a[0]给出1。令人困惑的是,在一些计算机科学家中存在着这样做是否是最好的方法的争论。有些语言,比如Fortran和Julia,有一个基于索引的索引,所以像你尝试做的事情实际上可以在那里工作。你知道吗
a = [1,2,3,4]
a[1]
2
现在回到问题上来:让我们一个循环一个循环。你知道吗
在第一个循环中,x = 1,所以x in b计算结果为True,b[1] = 'bull'计算结果为:b = [1,'bull',3,4]。你知道吗
x = 1
x in b
True
b[1] = 'bull'
b = [1,'bull',3,4]
在第二个循环中,x = 2,但是x in b的计算结果是False!记住b = [1,'bull',3,4],所以b中不再有2,它跳过了元素赋值!你知道吗
x = 2
在第三个循环中,3 in b是True,所以现在是b[3] = 'bull'和b = [1,'bull',3,'bull']。你知道吗
3 in b
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。非常适合零基索引!你知道吗
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。你知道吗
b[0] = 1
如果
x
是1
,那么b[x] = 'bull'
将写入x[1]
,但是a
列表中1
的位置实际上是a[0]
。你知道吗您想要的是使用
a
值的索引来操作b
中的相应值:如果确实要替换
b
中的值,而不考虑其索引,则需要首先找到要操作的索引:或者,更简短地说,使用列表理解:
可以使用^{} 检查两个列表对应索引处的元素是否相同。你知道吗
注意:列表索引从
0
开始。所以,需要将bull
分配给b
的x-1
索引。你知道吗最后,如果您需要一个1行:
这是一个比它最初出现时更有趣的问题。你知道吗
将迭代1,2,3,4。你知道吗
检查1、2、3、4是否分别位于
b
,并将b[x]
设置为bull
。 由于Python是基于零的索引,因此简单的猜测可以看到:相反,你会看到:
有什么好处?什么是零基索引?你知道吗
基于零的索引仅仅意味着,如果你想要某个东西的第一个元素,你可以在索引0处调用它。换句话说,如果
a = [1,2,3,4]
,那么a[1]
给出2
,a[0]
给出1
。令人困惑的是,在一些计算机科学家中存在着这样做是否是最好的方法的争论。有些语言,比如Fortran和Julia,有一个基于索引的索引,所以像你尝试做的事情实际上可以在那里工作。你知道吗现在回到问题上来:让我们一个循环一个循环。你知道吗
在第一个循环中,
x = 1
,所以x in b
计算结果为True
,b[1] = 'bull'
计算结果为:b = [1,'bull',3,4]
。你知道吗在第二个循环中,
x = 2
,但是x in b
的计算结果是False!记住b = [1,'bull',3,4]
,所以b
中不再有2,它跳过了元素赋值!你知道吗在第三个循环中,
3 in b
是True
,所以现在是b[3] = 'bull'
和b = [1,'bull',3,'bull']
。你知道吗在第四个循环中,
b
中没有4,所以什么也没有发生。你知道吗相反,对于您要实现的目标,您可以通过以下两种方式之一来实现:
在这个方法中,
i
被初始化为0,每个循环增加一个。所以i
将跨越:0,1,2,3
。非常适合零基索引!你知道吗另一种方法是:
当
x
是1时,x-1
给你0
,记住b[0] = 1
。你知道吗相关问题 更多 >
编程相关推荐