给出以下列表(我的实际列表比这更长,列表中至少有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]
之类的东西?)
答案 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']]
它使用元组解压缩在int
和str
之间进行拆分,只需创建一个新列表,即可添加str
的分割。