我有一个数字列表,我试图遍历列表并根据特定条件更改每个数字。但是我的代码并没有改变列表,当我最后再次打印它时它仍然是相同的。我的代码如下:
list = [[10.0, 4.0, 10.0, 10.0, 4.0, 0.0, 10.0, 10.0, 10.0, 4.0, 6.0]]
for x in list:
if (x >= 0):
x = 100
if (x < 0):
x = -100
print list
看着这个并没有解决问题Looping over a list in Python
答案 0 :(得分:2)
您有两个问题:一,您的清单实际上是一个清单列表;二,您没有正确地为列表分配值。尝试这样的事情:
# Loop over the indices of the list within the list
for i in range(len(list[0])):
if (list[0][i] >= 0):
list[0][i] = 100
else:
list[0][i] = -100
print list
有一些方法可以提高效率和推广效果,但保留for
循环样式,上面的代码可以适用于您的情况。
例如,您也可以这样做(在列表迭代表单中基本相同,并循环遍历列表列表中的每个列表,以防您只有一个):
[[100 if lst[i] >=0 else -100 for i in range(len(lst))] for lst in list]
有关多个列表的列表,其工作原理如下:
old = [[10.0, 4.0, 10.0, 10.0, 4.0, 0.0, 10.0, 10.0, 10.0, 4.0, 6.0],[-2, 2, -2]]
new = [[100 if lst[i] >=0 else -100 for i in range(len(lst))] for lst in old]
>>> new
[[100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100], [-100, 100, -100]]
此外,通常bad style调用您的列表list
,因为list
已经是python中的内置类型。
答案 1 :(得分:1)
第一个问题
您已获得值列表[[]]
而非普通列表[]
第二个问题您没有改变列表,您需要直接按索引更改项目
对于使用索引进行迭代,您可以使用enumerate(list)
第三条评论在您的情况下,也许最好使用else
而不是两个if
?
list = [10.0, 4.0, 10.0, 10.0, 4.0, 0.0, 10.0, 10.0, 10.0, 4.0, 6.0]
for i, x in enumerate(list):
if (x >= 0):
list[i] = 100
else:
list[i] = -100
print list
P.S。也许您不应该改变初始列表?也许最好返回新列表
list = [10.0, 4.0, 10.0, 10.0, 4.0, 0.0, 10.0, 10.0, 10.0, 4.0, 6.0]
def return_new_list(list):
new_list = []
for x in list:
if (x >= 0):
new_list.append(100)
else:
new_list.append(-100)
return new_list
print return_new_list(list)
答案 2 :(得分:0)
使用您发布的代码..
list = [[10.0, 4.0, 10.0, 10.0, 4.0, 0.0, 10.0, 10.0, 10.0, 4.0, 6.0]]
for i in range(len(list[0])):
if list[0][i] >= 0:
list[0][i] = 100
else:
list[0][i] = -100
print(list)
答案 3 :(得分:-1)
对于1 D列表
list = [100 if x >= 0 else -100 for x in list]
在您的问题中,您有列表清单。列表内的手段列表。 在上面的示例中,您可以看到我已遍历每个元素并根据元素设置值。
如果您有2D列表
list = [[100 if x >= 0 else -100 for x in items] for items in list]