Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我可以在python中的列表列表中进行扩展吗?_Python_List_For Loop_Extend - Fatal编程技术网

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

我可以在python中的列表列表中进行扩展吗?,python,list,for-loop,extend,Python,List,For Loop,Extend,我有如下数据: [[1, 100313], [2, 100313], [1, 100314], [3, 100315]] [[1, 100313, 0, 0, 1], [2, 100313, 0, 0, 1], [1, 100314], [3, 100315]] for x, y in list: if y == 100313: list.extend([0,0,1]) 所有内容都是字符串格式(否则我无法迭代) 我想运行一个for循环,该循环查看这些元素,如果它看到

我有如下数据:

[[1, 100313], [2, 100313], [1, 100314], [3, 100315]]
[[1, 100313, 0, 0, 1], [2, 100313, 0, 0, 1], [1, 100314], [3, 100315]]
for x, y in list:
    if y == 100313:
        list.extend([0,0,1])
所有内容都是字符串格式(否则我无法迭代)

我想运行一个for循环,该循环查看这些元素,如果它看到列表中的第二项为100313,则扩展为[0,0,1]。所以最终看起来是这样的:

[[1, 100313], [2, 100313], [1, 100314], [3, 100315]]
[[1, 100313, 0, 0, 1], [2, 100313, 0, 0, 1], [1, 100314], [3, 100315]]
for x, y in list:
    if y == 100313:
        list.extend([0,0,1])
我运行了一个类似以下内容的for循环:

[[1, 100313], [2, 100313], [1, 100314], [3, 100315]]
[[1, 100313, 0, 0, 1], [2, 100313, 0, 0, 1], [1, 100314], [3, 100315]]
for x, y in list:
    if y == 100313:
        list.extend([0,0,1])

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

您可以使用
列表理解来完成此操作,如以下示例所示:

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)
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], [3, 100315]]
[[1, 100313, 0, 0, 1], [2, 100313, 0, 0, 1], [1, 100314, 0, 1, 0], [3, 100315]]
更新:

您要求添加另一个
,如果。。。else
在一个
列表中阻塞理解
。您可以按照以下示例进行操作:

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)
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], [3, 100315]]
[[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下一行。这肯定会奏效。
因为你想做的是扩展你的列表,但你真正想要的是扩展列表的元素。希望这有帮助

谢谢,如果我也想扩展一个[0,1,0],如果k[1]==100314呢。这一切都可以在一个列表中理解吗?你可以在{100313,100314}@iklinac中使用if k[1],但它是一个不同的扩展…我怎么做呢?你说的不同是什么意思extension@ikliniac对于k[1]==100314,我想添加一个[0,1,0],对于k[1]==100313,我想添加一个[0,0,1],换句话说,我对他们的态度不同,你似乎在浏览外部列表。for循环将内部列表分解为x和y,如果内部列表正好有两个元素。但是当你尝试扩展时,你调用外部列表中的扩展。尝试将循环变量设置为整个内部列表,并在其中检查100313。然后调用内部列表上的extend。