我知道就地修改列表方法返回None
而不是被修改的列表。据我所见,这使得在列表推导式内部逻辑中使用这些方法变得不可能。
创建一个列表推导式,其成员来自于对其他列表的变异,最具Python风格的方式是什么?换句话说:这个(无效)代码行的最佳替代方案是什么:
new_list = [old_list.insert(0, "X") for old_list in list_of_old_lists]
这将导致一个由
None
列表组成的结果,因为list.insert()
返回None
。是否没有一种优雅的单行代码可以实现这个功能而不需要大量切片和连接?
上面的示例为了说明我的问题而是简单的,但实际上我想在更复杂的情况下使用它来代替多个嵌套的“for”循环。
以下是我尝试做的简化样本:
word = 'abcdefg'
variations_list = []
characters_to_insert = ['X', 'Y', 'Z']
for character in characters_to_insert:
for position in range(len(word) + 1):
w = list(word)
w.insert(position, character)
this_variation = ''.join(w)
variations_list.append(this_variation)
for v in variations_list:
print(v)
使用嵌套的“for”循环可以很好地解决此问题,就像这样(我的实际应用程序比此示例更复杂/冗长)。
但是,我无法使用列表推导来做同样的事情,因为“insert”方法返回None
:
variations_list_comprehension = [list(word).insert(position, character) for position in range(len(word) +1) for character in ['X', 'Y', 'Z']]
for v in variations_list_comprehension:
print(v)
结果以None
值的列表形式呈现,因为原地变异返回“None”。
for
循环。 - khelwoodnew_list_of_strings = [''.join(list(my_string).insert(0, "X")) for my_string in string_list]
- Alabaster