对多维lis的特定元素使用拆分

2024-04-19 16:43:44 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

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

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

但是输出是

5']
10']

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

我感兴趣的是对列表中的特定元素(本例中的第一个元素)使用split。你知道吗


Tags: 文件方法in功能元素列表for格式
2条回答

你需要更深一层,不要在列表中使用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

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

>>> [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

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

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

>>> 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]

或者更好的方法是使用RegEx进行检查,这样可以避免类似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

>>> [int(i[0][0].split('x')[1]) for i in a 
...  if all(j.isdigit() for j in i[0][0].split('x'))]
[5]

相关问题 更多 >