python列表修改列表列表

时间:2014-05-27 09:51:07

标签: python list python-2.7

我正在尝试学习python(刚刚完成了学习Python的艰难之路书!),但我似乎对列表有点挣扎。具体来说,我有一个这样的列表:

x = ["/2.ext", "/4.ext", "/5.ext", "/1.ext"]

我想对上面的列表进行操作,以便它返回一个列表(不知何故!),如下所示:

y = [ ["/1.ext", "/2.ext"], ["/1.ext", "/2.ext", "/3.ext, "/4.ext"], ["/1.ext", "/2.ext", "/3.ext", "/4.ext", "/5.ext"], ["/1.ext"] ]

因此,基本上,x中的每个元素现在都转换为列表列表。我可以循环遍历x,将所有序列列表存储在另一个列表中然后合并在一起 - 但似乎必须有更好的方法来实现它。

如果有人能指出我正确的方向来解决这个问题,我将不胜感激。

编辑(考虑到Martijn的评论):

具体来说,我想在序列中生成中间文件名,以每个x列表元素的数字结尾

1 个答案:

答案 0 :(得分:2)

您可以按照以下方式执行此操作:

x = ["/2.ext", "/4.ext", "/5.ext", "/1.ext"]

print [['/{}.ext'.format(j) for j in range(1,int(i[1])+1)] for i in x]

[OUTPUT]
[['/1.ext', '/2.ext'], ['/1.ext', '/2.ext', '/3.ext', '/4.ext'], ['/1.ext', '/2.ext', '/3.ext', '/4.ext', '/5.ext'], ['/1.ext']]

这仅适用于最高为9的数字。我将发布更新以获得更一般的解决方案

这是更通用的解决方案。适用于任何数字:

import re

x = ["/2.ext", "/4.ext", "/5.ext", "/1.ext"]

print [['/{}.ext'.format(j) for j in range(1,int(re.search(r'\d+',i).group(0))+1)] for i in x]