如何遍历列表列表以基于python中的条件更改列表项

时间:2018-08-22 17:28:56

标签: python

我有以下有效的示例python代码示例,但是我需要将一系列IF语句转换为for循环以扩展到更大的列表。只是不确定如何。任何帮助是极大的赞赏。

my_list = [[1,2,y,5],[5,6,y,4],[9,4,n,3],[3,2,n,5]]

if my_list[0][2] == y:
    my_list[0][4]= some_new_value
if my_list[1][2] == y:
    my_list[1][4]= some_new_value
if my_list[2][2] == y:
    my_list[2][4]= some_new_value
if my_list[3][2] == y:
    my_list[3][4]= some_new_value

2 个答案:

答案 0 :(得分:1)

for item in my_list:
    if item[2] == y:
        item[4] = some_new_value

答案 1 :(得分:1)

此解决方案应适合更广泛的情况(例如,如果要替换的变量并不总是位于索引2的位置):

[[some_new_value if i==y else i for i in each_list] for each_list in my_list]

这是您的示例(带有示例输入):

y = 'y'
n = 'n'
some_new_value = 'NEW'

my_list = [[1,2,y,5],[5,6,y,4],[9,4,n,3],[3,2,n,5]]

output = [[some_new_value if i==y else i for i in each_list] for each_list in my_list]

哪个给:

[[1, 2, 'NEW', 5], [5, 6, 'NEW', 4], [9, 4, 'n', 3], [3, 2, 'n', 5]]

这是另一个示例输入,列表的列表中的每个列表的值并不总是位于相同的索引位置(或者如果有多个出现):

my_list = [[1,y,2,5],[y,6,y,4],[9,4,n,y],[y,2,n,5]]

哪个给:

[[1, 'NEW', 2, 5], ['NEW', 6, 'NEW', 4], [9, 4, 'n', 'NEW'], ['NEW', 2, 'n', 5]]

编辑

修改后的答案,如果列表中仍然存在y,则更改每个列表中的最后一个元素:

[i[:-1] + [some_new_value] if y in i else i for i in my_list]

如果它始终位于索引2,则可以执行以下操作:

[i[:-1] + [some_new_value] if i[2]==y else i for i in my_list]