“展平”列表中的一串单词

时间:2017-01-28 14:27:06

标签: python python-2.7 list

给出以下列表(我的实际列表比这更长,列表中至少有100个子列表):

[[135, "Apple Banana"], [136, "Peach Watermelon"], [137, "Orange Steak"]]

获得以下列表的“Pythonic方式”是什么?

[[135, "Apple", "Banana"], [136, "Peach", "Watermelon"], [137, "Orange", "Steak"]]

我已经有了使用for-loop的实现。

myList = [[135, "Apple Banana"], [136, "Peach Watermelon"], [137, "Orange Steak"]]

temp_container = []

for subList in myList:
    temp_container = subList[1].split(" ")
    subList[1] = temp_container[0]
    subList.append(temp_container[1])

我想知道是否有更好的实施? (也许使用[map(function, subList) for subList in myList]之类的东西?)

3 个答案:

答案 0 :(得分:2)

您可以使用list comprehension来实现它,解压缩子列表并在每个子列表的第二项上使用str.split()

In [1]: l = [[135, "Apple Banana"], [136, "Peach Watermelon"], [137, "Orange Steak"]]

In [2]: [[item0] + item1.split() for item0, item1 in l]
Out[2]: 
[[135, 'Apple', 'Banana'],
 [136, 'Peach', 'Watermelon'],
 [137, 'Orange', 'Steak']]

或者,没有拆包:

In [3]: [[item[0]] + item[1].split() for item in l]
Out[3]: 
[[135, 'Apple', 'Banana'],
 [136, 'Peach', 'Watermelon'],
 [137, 'Orange', 'Steak']]

答案 1 :(得分:1)

如果

l = [[135, "Apple Banana"], [136, "Peach Watermelon"], [137, "Orange Steak"]]

然后:

[[a, *b.split()] for [a, b] in l]

会给:

[[135, 'Apple', 'Banana'], [136, 'Peach', 'Watermelon'], [137, 'Orange', 'Steak']]

编辑:但不是在Python 2.7中,这个问题被特别标记为。

答案 2 :(得分:1)

有很多解决方案,这是对我来说最有意义的解决方案:

>>> your_list = [[135, "Apple Banana"], [136, "Peach Watermelon"], [137, "Orange Steak"]]
>>> [[a] + b.split() for a, b in your_list]
[[135, 'Apple', 'Banana'], [136, 'Peach', 'Watermelon'], [137, 'Orange', 'Steak']]

它使用元组解压缩在intstr之间进行拆分,只需创建一个新列表,即可添加str的分割。