我需要将列表列表拆分为列表列表(在内部检查)

时间:2014-07-02 00:40:23

标签: python

我有一个像这样的项目列表:

[['1 2 3 4 5', '6 7 8 9 10'], ['1 2 3 4 5', '6 7 8 9 10']]

我想把它变成这个:

[[['1', '2', '3', '4', '5'],
['6', '7', '8', '9', '10']],
[['1', '2', '3', '4', '5'],
['6', '7', '8', '9', '10']]

到目前为止,我有这段代码:

for list in mylists[]:
    for items in list[]:
        items = items.split()
        print items
print mylists

我遇到的问题是

        print items

打印列表列表应该如何(我希望它看起来如何),然后

print mylists

以原始形式打印列表列表(项目列表的原始列表)。

看起来列表的编辑没有进行,就像编辑超出范围一样。如何让编辑保留?

我知道这段代码看起来很混乱,所以如果你需要澄清那么请注释。

2 个答案:

答案 0 :(得分:6)

使用map或comprehensions构建新列表:

split_mylists = [[e.split() for e in x] for x in mylists]

如果您希望就地编辑,则需要替换内部数组的元素:

mylists = [['1 2 3 4 5', '6 7 8 9 10'], ['1 2 3 4 5', '6 7 8 9 10']]
for sublist in mylists:
    for i, items in enumerate(sublist):
        sublist[i] = items.split()
print mylists

在你的代码中(如果它在语法上是正确的),你将替换局部变量items的值,它不反映(有些不幸的名字)列表list的内容

编辑变量名称更改,并澄清第一个代码段构造新列表。

答案 1 :(得分:1)

问题是您要打印出正在生成的值,但不存储它们以供进一步使用。由于您需要列表列表,因此应该从空列表开始,并在创建时添加每个元素。创建第二级元素还涉及创建第三级元素。

mydata = [['1 2 3 4 5', '6 7 8 9 10'], ['1 2 3 4 5', '6 7 8 9 10']]

outlist = []
for lst in mydata:
    level2 = []
    for item in lst:
        level3 = item.split()
        level2.append(level3)
    outlist.append(level2)
from pprint import pprint
pprint(outlist)

提供输出

[[['1', '2', '3', '4', '5'], ['6', '7', '8', '9', '10']],
 [['1', '2', '3', '4', '5'], ['6', '7', '8', '9', '10']]]