list1 = [1,2,3]
def ex(example_list):
for number in example_list:
if(number == 2):
number = 3
ex(list1)
print(list1)
我需要检查list1中是否有数字2,如果它在里面,我想将其修改为3。
但是如果我运行命令,number
将是3
,但list1
将保持[1,2,3]
而不是[1,3,3]
答案 0 :(得分:5)
您可以使用list1 = [1,2,3]
def ex(example_list):
for idx, number in enumerate(example_list):
if(number == 2):
example_list[idx] = 3
ex(list1)
print(list1)
获取需要更改的数字的索引:
number
变量{{1}}是一个具有自己引用的对象,而不是对列表中项目的引用。
答案 1 :(得分:3)
检查和替换的逻辑可以使用三元运算符在列表解析中完全完成,因为您实际上并未使用索引:
list2 = [3 if num==2 else num for num in list1]
参考文献:
答案 2 :(得分:2)
为了修改列表项,您需要知道它所在的插槽。列表的.index()
方法可以告诉您。
list1 = [1,2,3]
i = list1.index(2)
list1[i] = 2
如果列表中不包含2
,会发生什么? index()
将抛出异常,通常会终止您的程序。但是,您可以捕获该错误,并且不执行任何操作:
list1 = [1,2,3]
try:
i = list1.index(2)
except ValueError:
pass
else: # no error occurred
list1[i] = 2
答案 3 :(得分:2)
所以...你遇到的问题是,由于number
包含基本类型(int
),修改number
不会修改列表中的引用。基本上,您需要使用要更改的项目的index
来更改列表中的项目:
list1 = [1,2,3]
def ex(example_list):
for i, number in enumerate(example_list):
if(number == 2):
example_list[i] = 3 # <-- This is the important part
ex(list1)
print(list1)
仅使用索引(可能更清楚):
list1 = [1,2,3]
def ex(example_list):
for i in range(len(example_list)):
if(example_list[i] == 2):
example_list[i] = 3
ex(list1)
print(list1)
答案 4 :(得分:1)
l.index(n)
将返回在n
l中可以找到list
的索引,如果它不在那里则会抛出一个ValueError。
如果您想用某些内容替换n
的第一个实例,这非常有用,如下所示:
>>> l = [1,2,3,4]
>>> # Don't get to try in case this fails!
>>> l[l.index(2)] = 3
>>> l
[1, 3, 3, 4]
如果你需要用3&#39替换所有 2,只需迭代,添加元素即可。如果元素不是2,那就没问题了。否则,请将其设为3。
l = [e if e != 2 else 3 for e in l]
用法:
>>> l = [1,2,3,4]
>>> l = [e if e != 2 else 3 for e in l]
>>> l
[1, 3, 3, 4]