繁体   English   中英

我可以在python中的列表列表中扩展吗?

[英]Can I extend within a list of lists in python?

我的数据看起来像这样:

[[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])

并且它根本不会改变列表。 这是为什么?

你可以像这个例子那样使用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]]

更新:

您要求在一个list comprehension添加另一个if ... else块。 你可以这样做:

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

如果处理大量数据并希望避免低效使用内存,最好使用生成器表达式。 它们看起来非常类似于列表理解,除了它们有括号而不是方括号:

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()

生成器表达式返回生成器对象而不是整个列表。 您可以通过循环返回的生成器来逐个懒惰地打印元素。

请注意,这只有在您拥有非常大的列表时才有意义,而不是在您的问题示例中。

在if语句中使用list [x] [y]而不是y。 并使用list [x]而不是列出下一行。 这肯定会奏效。 因为你要做的是你试图扩展你的列表,但你真正想要的是扩展list.hope的元素它有助于

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM