我有一个如下列表:
list1 = ["pierre", "paul", "jacques"]
我想创建一个包含6个项目的新列表:
list2 = ["pierre", "pierre#2","paul","paul#2", "jacques", "jacques#2"]
我尝试了以下内容:
list2 = [i, "{}#2".format(i) for i in list1 ]
显然没有用。有人会建议什么会起作用吗?
答案 0 :(得分:6)
您可以使用嵌套循环执行此操作:
[item for i in list1 for item in (i, "{}#2".format(i))]
for item in (...)
内循环每次产生2个项目。
答案 1 :(得分:2)
也许我是唯一一个难以阅读嵌套列表推导的人,但我倾向于像瘟疫 1 那样避开它们。在这种情况下,我可能会使用香草循环:
lst_out = []
for item in list1:
lst_out.extend((item, '{}#2'.format(item)))
或另一种选择是生成器功能:
def gen(list1):
for item in list1:
yield item
yield '{}#2'.format(item)
1 这不是100%真实......标准的嵌套列表展平成语对我来说是公认的,所以我已经使用过一次或两次。也许我只需要开始使用它们,以便它们变得更直观......
答案 2 :(得分:0)
你永远不会这样做(其他答案都更好),但作为思考练习:
from itertools import chain
l = list(chain.from_iterable((x, x+'#2') for x in list1))
答案 3 :(得分:0)
你仍然可以尝试(你只是缺少一些括号来创建tuple
s)然后"展平"后来的元组:
list2 = [(i, "{}#2".format(i)) for i in list1]
list2 = [x for y in list2 for x in y]
产生:
['pierre', 'pierre#2', 'paul', 'paul#2', 'jacques', 'jacques#2']