我有一个简单的列表,我正在拆分和连接。我的代码使用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']
答案 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']