我有以下有效的示例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
答案 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]