如何在for循环中编辑列表元素 - python

时间:2018-02-22 17:18:09

标签: python list

我有一个数字列表,我试图遍历列表并根据特定条件更改每个数字。但是我的代码并没有改变列表,当我最后再次打印它时它仍然是相同的。我的代码如下:

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

4 个答案:

答案 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]