将列表扩展为列表
extending a list to a list
如果 List1
中的元素等于 List2
中的项目,我将尝试将值扩展到列表。我使用 extend 而不是 append 因为 extend 应该合并两个列表。相反,它似乎是嵌套列表。
删除 y[1],y[2]
周围的括号会产生:
SyntaxError: Generator expression must be parenthesized if not sole argument
List1 = [['value1','value2','Value3'],['value4','value5','value6']]
List2 = [['option1','option2','value2'],['option3','option4','value5']]
for x in List1:
x.extend([y[1],y[2]] for y in List2 if y[2] == x[1])
print List1
我的输出:
[['value1', 'value2', 'Value3', ['option2', 'value2']], ['value4', 'value5', 'value6', ['option4', 'value5']]]
期望的输出:
[['value1', 'value2', 'Value3', 'option2', 'value2'], ['value4', 'value5', 'value6', 'option4', 'value5']]
as [[y[1],y[2]] for y in List2 if y[2] == x[1]]
return list of list
>>> List1 = [['value1','value2','Value3'],['value4','value5','value6']]
>>> List2 = [['option1','option2','value2'],['option3','option4','value5']]
>>> for x in List1:
... [[y[1],y[2]] for y in List2 if y[2] == x[1]]
...
[['option2', 'value2']]
[['option4', 'value5']]
所以从列表中获取第一项以在 x
中扩展
>>> List1 = [['value1','value2','Value3'],['value4','value5','value6']]
>>> List2 = [['option1','option2','value2'],['option3','option4','value5']]
>>> for x in List1:
... x.extend([[y[1],y[2]] for y in List2 if y[2] == x[1]][0])
...
>>> List1
[['value1', 'value2', 'Value3', 'option2', 'value2'], ['value4', 'value5', 'value6', 'option4', 'value5']]
>>>
Python 初学者
逐行扩展上面的代码。
- 用于循环迭代 List1 和 List2 中的项目
- 如果条件检查值。
- 使用列表扩展方法将列表项附加到现有列表中。
代码:
>>> List1 = [['value1','value2','Value3'],['value4','value5','value6']]
>>> List2 = [['option1','option2','value2'],['option3','option4','value5']]
>>>
>>> for x in List1:
... for y in List2:
... if y[2]==x[1]:
... print "In if value:", [y[1],y[2]]
... x.extend([y[1],y[2]])
...
In if value: ['option2', 'value2']
In if value: ['option4', 'value5']
>>> List1
[['value1', 'value2', 'Value3', 'option2', 'value2'], ['value4', 'value5', 'value6', 'option4', 'value5']]
>>>
使用 itertools.chain.from_iterable
将 iterators/lists 的 iterator/list 扁平化为 iterator/list,然后可以将其传递给 .extend(
。这将适用于以下情况:
([y[1],y[2]] for y in List2 if y[2] == x[1])
有任意数量的匹配项。示例输入只有一个,但最好期望更多是合理的。参见:
>>> import itertools
>>> List1 = [['value1','value2','Value3'],['value4','value5','value6']]
>>> List2 = [['option1','option2','value2'],['option3','option4','value5']]
>>>
>>> for x in List1:
... x.extend(itertools.chain.from_iterable([y[1],y[2]] for y in List2 if y[2] == x[1]))
...
>>> print List1
[['value1', 'value2', 'Value3', 'option2', 'value2'], ['value4', 'value5', 'value6', 'option4', 'value5']]
如果 List1
中的元素等于 List2
中的项目,我将尝试将值扩展到列表。我使用 extend 而不是 append 因为 extend 应该合并两个列表。相反,它似乎是嵌套列表。
删除 y[1],y[2]
周围的括号会产生:
SyntaxError: Generator expression must be parenthesized if not sole argument
List1 = [['value1','value2','Value3'],['value4','value5','value6']]
List2 = [['option1','option2','value2'],['option3','option4','value5']]
for x in List1:
x.extend([y[1],y[2]] for y in List2 if y[2] == x[1])
print List1
我的输出:
[['value1', 'value2', 'Value3', ['option2', 'value2']], ['value4', 'value5', 'value6', ['option4', 'value5']]]
期望的输出:
[['value1', 'value2', 'Value3', 'option2', 'value2'], ['value4', 'value5', 'value6', 'option4', 'value5']]
as [[y[1],y[2]] for y in List2 if y[2] == x[1]]
return list of list
>>> List1 = [['value1','value2','Value3'],['value4','value5','value6']]
>>> List2 = [['option1','option2','value2'],['option3','option4','value5']]
>>> for x in List1:
... [[y[1],y[2]] for y in List2 if y[2] == x[1]]
...
[['option2', 'value2']]
[['option4', 'value5']]
所以从列表中获取第一项以在 x
>>> List1 = [['value1','value2','Value3'],['value4','value5','value6']]
>>> List2 = [['option1','option2','value2'],['option3','option4','value5']]
>>> for x in List1:
... x.extend([[y[1],y[2]] for y in List2 if y[2] == x[1]][0])
...
>>> List1
[['value1', 'value2', 'Value3', 'option2', 'value2'], ['value4', 'value5', 'value6', 'option4', 'value5']]
>>>
Python 初学者 逐行扩展上面的代码。
- 用于循环迭代 List1 和 List2 中的项目
- 如果条件检查值。
- 使用列表扩展方法将列表项附加到现有列表中。
代码:
>>> List1 = [['value1','value2','Value3'],['value4','value5','value6']]
>>> List2 = [['option1','option2','value2'],['option3','option4','value5']]
>>>
>>> for x in List1:
... for y in List2:
... if y[2]==x[1]:
... print "In if value:", [y[1],y[2]]
... x.extend([y[1],y[2]])
...
In if value: ['option2', 'value2']
In if value: ['option4', 'value5']
>>> List1
[['value1', 'value2', 'Value3', 'option2', 'value2'], ['value4', 'value5', 'value6', 'option4', 'value5']]
>>>
使用 itertools.chain.from_iterable
将 iterators/lists 的 iterator/list 扁平化为 iterator/list,然后可以将其传递给 .extend(
。这将适用于以下情况:
([y[1],y[2]] for y in List2 if y[2] == x[1])
有任意数量的匹配项。示例输入只有一个,但最好期望更多是合理的。参见:
>>> import itertools
>>> List1 = [['value1','value2','Value3'],['value4','value5','value6']]
>>> List2 = [['option1','option2','value2'],['option3','option4','value5']]
>>>
>>> for x in List1:
... x.extend(itertools.chain.from_iterable([y[1],y[2]] for y in List2 if y[2] == x[1]))
...
>>> print List1
[['value1', 'value2', 'Value3', 'option2', 'value2'], ['value4', 'value5', 'value6', 'option4', 'value5']]