python – 使用逗号分隔值从另一个列表生成列表

我有以下列表:

mylist = ['7','8,9','10', '11,12']

我想要一个列表:

['7','8','9','10','11','12']

我能得到的最近的是使用此代码:

mylist = ['7','8,9','10', '11,12']
ab = []
for e in mylist:
    if ',' in e:
       ab.append(e.split(','))
mylist2 = [x for x in mylist  if ',' not in x]
print mylist2 #clean list

merged = []
for f in ab:
     merged =  mylist2 + f

但是,这省略了’8′,’9’序列,我怎样才能轻松实现这一目标?

最佳答案 您现有代码的问题非常简单:

merged = []
for f in ab:
     merged =  mylist2 + f

对于ab中的每个f,您会忘记合并中的任何内容并将其替换为mylist f.所以,最后,只有最后一个f最终合并.

你可能想要这样的东西:

for f in ab:
    mylist2 = mylist2 + f
merged = mylist2

这样我们就可以将每个f添加到列表中并将结果存储在同一个地方.

但是,有一种更简单的方法可以解决这个问题.而不是用逗号删除它们然后再添加它们,只需处理所有内容:

mylist = ['7','8,9','10', '11,12']
merged = []
for element in mylist:
    elements = element.split(',')
    merged += elements

这可以保留所有内容,并保持原始顺序,并且更简单. (注意’7′.split(‘,’)非常精细 – 它返回一个单元素列表[‘7’],您可以像[‘8’,’9’一样添加到累积列表中].)

您可以通过首先使用理解来拆分每个元素,然后合并和展平结果来使这更简洁.有几种方法可以写这个,但这里有几个:

merged = [subelement for element in mylist for subelement in element.split(',')]

from itertools import chain
merged = list(chain.from_iterable(element.split(',') for element in mylist))
点赞