我的数据如下:
[[1, 100313], [2, 100313], [1, 100314], [3, 100315]]
一切都是字符串格式(否则我不能迭代)
我想运行一个查看这些元素的for循环,如果它将列表中的第二个项目看作100313,则使用[0,0,1]进行扩展。所以最终它看起来像这样:
[[1, 100313, 0, 0, 1], [2, 100313, 0, 0, 1], [1, 100314], [3, 100315]]
我运行了一个看起来像这样的for循环:
for x, y in list:
if y == 100313:
list.extend([0,0,1])
并且它根本不会更改列表。那是为什么?
答案 0 :(得分:3)
您可以使用list comprehension
这样做:
a = [[1, 100313], [2, 100313], [1, 100314], [3, 100315]]
final = [k+[0,0,1] if k[1] == 100313 else k for k in a]
print(final)
输出:
[[1, 100313, 0, 0, 1], [2, 100313, 0, 0, 1], [1, 100314], [3, 100315]]
更新
您要求在一个if ... else
中添加另一个list comprehension
块。你可以这样做:
a = [[1, 100313], [2, 100313], [1, 100314], [3, 100315]]
final = [k+[0,0,1] if k[1] == 100313 else k+[0,1,0] if k[1] == 100314 else k for k in a]
print(final)
输出:
[[1, 100313, 0, 0, 1], [2, 100313, 0, 0, 1], [1, 100314, 0, 1, 0], [3, 100315]]
答案 1 :(得分:1)
如果您处理大量数据并希望避免低效使用内存,那么使用生成器表达式会更好。它们看起来非常类似于列表理解,除了它们有括号而不是方括号:
from __future__ import print_function
a = [[1, 100313], [2, 100313], [1, 100314], [3, 100315]]
final = (k+[0,0,1] if k[1] == 100313 else k+[0,1,0] if k[1] == 100314 else k for k in a)
for i in final:
print(i, end='')
print()
生成器表达式返回生成器对象而不是整个列表。您可以通过循环返回的生成器来逐个懒惰地打印元素。
请注意,这只有在您拥有真正的大型列表时才有意义,而不是像您的问题示例中那样。
答案 2 :(得分:0)
在if语句中使用list [x] [y]而不是y。并使用list [x]而不是列出下一行。这肯定会奏效。 因为你要做的是你试图扩展你的列表,但你真正想要的是扩展list.hope的元素它有帮助