按逗号分隔字符串列表

8

我想转换

['60,78', '70,77', '80,74', '90,75', '100,74', '110,75']

进入

['60', '78', '70', '77'.. etc]

我认为我可以使用
for word in lines:
    word = word.split(",")
    newlist.append(word)
return newlist

但实际上,这会产生以下结果:
[['60', '78'], ['70', '77'], ['80', '74'], ['90', '75'], ['100', '74'], ['110', '75']]

有人可以提供解决方案吗?

4个回答

14
你需要使用 list.extend 而不是使用 list.append
newlist = []
for word in lines:
    word = word.split(",")
    newlist.extend(word)  # <----
return newlist

或者,使用列表推导式:list comprehension
>>> lst = ['60,78', '70,77', '80,74', '90,75', '100,74', '110,75']
>>> [x for xs in lst for x in xs.split(',')]
['60', '78', '70', '77', '80', '74', '90', '75', '100', '74', '110', '75']

6

str.split 实际上返回的是一个列表。

使用 sep 作为分隔符,返回字符串中的单词列表。

由于你将返回的列表附加到 newlist 上,所以你得到的是一个列表的列表。而应该使用 list.extend 方法,像这样:

for word in lines:
    newlist.extend(word.split(","))

但是你可以像这样简单地使用嵌套列表推导式
>>> data = ['60,78', '70,77', '80,74', '90,75', '100,74', '110,75']
>>> [item for items in data for item in items.split(",")]
['60', '78', '70', '77', '80', '74', '90', '75', '100', '74', '110', '75']

1
使用 itertools.chain
from itertools import chain

print(list(chain.from_iterable(ele.split(",") for ele in l)))
['60', '78', '70', '77', '80', '74', '90', '75', '100', '74', '110', '75']

当您需要扁平化链表时,拥有更多的项目可以使其更加高效:

In [1]: l= ["1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20" for _ in range(100000)]

In [2]: from itertools import chain

In [3]: l= ["1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30" for _ in range(10000)]

In [4]: timeit (list(chain.from_iterable(ele.split(",") for ele in l)))
100 loops, best of 3: 17.7 ms per loop

In [5]: timeit  [item for items in l for item in items.split(",")]
10 loops, best of 3: 20.9 ms per loop

0

我认为这是最简单的方法(感谢帮助我的朋友)

list=['60,78', '70,77', '80,74', '90,75', '100,74', '110,75']
for word in list:
    chapter, number = word.split(',') #word = word.split(',')
    print(word)

这个解决方案没有产生预期的输出。 - Georgy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接