对多维列表的特定元素使用split

时间:2016-01-11 12:08:09

标签: python list split nested-lists

我有以下列表(实际文件更大更复杂)

a = [[['3x5'], ['ff']], [['4x10'], ['gg']]]

我想对列表中的第一个元素使用拆分功能,并获取“x”后出现的值。在这种情况下,最终结果应为5和10。我试图以这种格式使用拆分

for line in a:
    print str(line[0]).split("x")[1]

但输出是

5']
10']

我知道我可以很容易地操作输出得到5和10但是在这种情况下使用split的正确方法是什么?

我感兴趣的是将split用于列表的特定元素(在本例中为第一个元素)。

2 个答案:

答案 0 :(得分:3)

你需要深入一级,不要在列表中使用str()。

>>> a = [[['3x5'], ['ff']], [['4x10'], ['gg']]]
>>> for y in a:
...   if 'x' in y[0][0]:
...     print y[0][0].split('x')[-1]
5
10

答案 1 :(得分:2)

您不应该将列表作为字符串对象,但是,您可以使用:

>>> [i[0][0].split('x')[1] for i in a]
['5', '10']

我认为您还想将输出转换为int对象,然后您只需添加int()如下所示:

>>> [int(i[0][0].split('x')[1]) for i in a]
[5, 10]

但是,如果您不需要将输出保存到列表中,而是将其打印出来,则可以使用相同的代码,但要编写另一个版本:

a = [[['3x5'], ['ff']], [['4x10'], ['gg']]]                                     
for i in a:                                          
    print(i[0][0].split('x')[1])  

输出:

5
10

请记住,当IndexError: list index out of range为时,我的代码将失败(引发a)...例如[[['3x5'], ['ff']], [['kk'], ['gg']]](其中一个子列表中的第一个元素的格式不像{ {1}})。

但是,一个简单的'3x5'可以解决这个问题:

if

甚至更好,使用RegEx进行检查,这可以避免>>> a = [[['3x5'], ['ff']], [['kk'], ['gg']]] >>> [int(i[0][0].split('x')[1]) for i in a] Traceback (most recent call last): File "<input>", line 1, in <module> File "<input>", line 1, in <listcomp> IndexError: list index out of range >>> [int(i[0][0].split('x')[1]) for i in a if 'x' in i[0][0]] [5]

之类的内容
a = [[['3x5'], ['ff']], [['xxxxxxx'], ['gg']]]

另一种方式,如果你不想要>>> import re >>> a = [[['3x5'], ['ff']], [['xxxxxxx'], ['gg']]] >>> [int(i[0][0].split('x')[1]) for i in a if re.search(r'\d+x\d+', i[0][0])] [5]

import re