Python 对多维列表的特定元素使用拆分
我有以下列表(实际文件要大得多,复杂得多) 我想对列表中的第一个元素使用拆分功能,并获取显示在“x”之后的值。在这种情况下,最终结果应该是5和10。我尝试使用这种格式的拆分Python 对多维列表的特定元素使用拆分,python,list,split,nested-lists,Python,List,Split,Nested Lists,我有以下列表(实际文件要大得多,复杂得多) 我想对列表中的第一个元素使用拆分功能,并获取显示在“x”之后的值。在这种情况下,最终结果应该是5和10。我尝试使用这种格式的拆分 for line in a: print str(line[0]).split("x")[1] 但结果是 5'] 10'] 我知道我可以很容易地操纵输出以获得5和10,但是在这种情况下使用split的正确方法是什么 我对列表中的特定元素(本例中的第一个元素)使用split很感兴趣 你需要更深一层,不要在列表中使用
for line in a:
print str(line[0]).split("x")[1]
但结果是
5']
10']
我知道我可以很容易地操纵输出以获得5和10,但是在这种情况下使用split的正确方法是什么
我对列表中的特定元素(本例中的第一个元素)使用split很感兴趣 你需要更深一层,不要在列表中使用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
你需要更深一层,不要在列表中使用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
被激活时,我的代码将失败(引发索引器错误:列表索引超出范围
)。。。例如[[['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]
另一种方法是,如果您不想重新导入:
>>> [int(i[0][0].split('x')[1]) for i in a
... if all(j.isdigit() for j in i[0][0].split('x'))]
[5]
您不应该将列表添加到字符串对象,但是,您可以使用:
>>> [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
被激活时,我的代码将失败(引发索引器错误:列表索引超出范围
)。。。例如[[['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]
另一种方法是,如果您不想重新导入:
>>> [int(i[0][0].split('x')[1]) for i in a
... if all(j.isdigit() for j in i[0][0].split('x'))]
[5]
谢谢Tim,这是一个很大的帮助/@Hamed你现在有两个答案来帮助解决你的问题。15分钟的时间已经过去了,如果你觉得你的问题已经解决了,那么你可以自由地接受任何一个你喜欢的。另请参见谢谢Tim,这是一个很大的帮助/@Hamed您现在有两个答案来帮助解决您的问题。15分钟的时间已经过去了,如果你觉得你的问题已经解决了,那么你可以自由地接受任何一个你喜欢的。另请参见感谢Kevin,您的解决方案以及Tim解决方案适用于我编写的示例。但问题是我只对列表中的第一个元素感兴趣。例如,如果其他地方有“x”,您的解决方案也将返回该值。例如,如果a=[[['3x5']、['ff']、[[['4x10']、['5x12']]],则输出将是5、10和12@Hamed要求,如问题中应解释的要求。请现在编辑它,并记住它以备下次使用。@Hamed:好的,我已经编辑了我的答案。现在它还提供了5
和10
当a=[[['3x5']、['ff']]、['4x10']、['5x12']]]
时,谢谢你编辑你的问题。谢谢蒂姆和凯文,我试图编辑我的问题,这样其他人就可以清楚了。为什么不[int(I[0][0]。拆分('x')[1])I,如果I[0][0]中的“x”
?谢谢凯文,您的解决方案以及Tim解决方案适用于我编写的示例。但问题是我只对列表中的第一个元素感兴趣。例如,如果其他地方有“x”,您的解决方案也将返回该值。例如,如果a=[[['3x5']、['ff']、[[['4x10']、['5x12']]],则输出将是5、10和12@Hamed要求,如问题中应解释的要求。请现在编辑它,并记住它以备下次使用。@Hamed:好的,我已经编辑了我的答案。现在它还提供了5
和10
当a=[[['3x5']、['ff']]、['4x10']、['5x12']]]
时,谢谢你编辑你的问题。谢谢蒂姆和凯文,我试着编辑我的问题,这样其他人就可以清楚了。为什么不[int(I[0][0]。如果I[0][0]中的“x”[1])I在I中拆分('x')
?