使用列表理解以更好的方式拆分列表

时间:2018-01-18 01:47:56

标签: python list

我有一个简单的列表,我正在拆分和连接。我的代码使用for循环,如果条件和丑陋。你能建议一个更好的方法来使用列表理解吗?

我的代码

mylist = ['10.10.10.1','10.10.10.2,10.10.10.3,10.10.10.4,10.10.10.5','10.10.10.6']

mylist = [i.split(",") for i in mylist] 
list =[]
for x,y in enumerate(mylist):
    if len(y) == 1:
        list.append(y[0])
    else:
        for z in y:
            list.append(z)
print(list)

我得到的结果与我想要的完全一致     ['10 .10.10.1' , '10.10.10.2', '10.10.10.3', '10.10.10.4', '10.10.10.5', '10.10.10.6']

4 个答案:

答案 0 :(得分:3)

你想:

[s for string in mylist for s in string.split(',')]

请注意,如果您简化,原始方法就不会那么糟糕。不需要enumerate,也不需要检查长度,所以只需:

final_list =[]
for sub in mylist:
    for s in sub:
         final_list.append(s)

顺便说一句,你不应该隐藏内置的list。使用其他名称

答案 1 :(得分:1)

我同意@ juanpa.arrivillaga。但是希望我们可以避免第二次循环,因为他正在检查在拆分时返回的空值

In [7]: s=['10.10.10.1','','10.10.10.2,10.10.10.3,10.10.10.4,10.10.10.5','10.10.10.6']

In [8]: [splitRec for rec in s for splitRec in rec.split(',') if splitRec]
Out[8]: 
['10.10.10.1',
 '10.10.10.2',
 '10.10.10.3',
 '10.10.10.4',
 '10.10.10.5',
 '10.10.10.6']

In [9]: s=['10.10.10.1',',,','10.10.10.2,10.10.10.3,10.10.10.4,10.10.10.5','10.10.10.6']

In [10]: [splitRec for rec in s for splitRec in rec.split(',') if splitRec]Out[10]: 
['10.10.10.1',
 '10.10.10.2',
 '10.10.10.3',
 '10.10.10.4',
 '10.10.10.5',
 '10.10.10.6']

答案 2 :(得分:1)

不是理解,但无论如何,我想是好的。

','.join(mylist).split(',')

答案 3 :(得分:0)

您可以先在','上分割每个字符串:

>>> mylist = ['10.10.10.1','10.10.10.2,10.10.10.3,10.10.10.4,10.10.10.5','10.10.10.6']
>>> split_str = [x.split(',') for x in mylist]
>>> split_str
[['10.10.10.1'], ['10.10.10.2', '10.10.10.3', '10.10.10.4', '10.10.10.5'], ['10.10.10.6']]

然后,如果要展平它,可以使用angular-ckeditor

>>> from itertools import chain
>>> list(chain.from_iterable(split_str))
['10.10.10.1', '10.10.10.2', '10.10.10.3', '10.10.10.4', '10.10.10.5', '10.10.10.6']