将str元组列表转换为int元组列表?

时间:2019-01-05 13:24:43

标签: python list tuples

我有一个要导入字典的元组列表。这些元组由两个字符串组成。我想将这些元组转换为整数。即

myList = ['0,1', '0,2', '0,3']

结果列表应为:

resList = [(0,1), (0,2), (0,3)]

我尝试使用:

list(map(int, myList))

但这似乎不起作用。

5 个答案:

答案 0 :(得分:4)

您可以使用eval函数来获取元组,如下所示。在python2和python3中都可以使用。

>>> myList = ['0,1', '0,2', '0,3']
>>> list(map(eval, myList))
[(0, 1), (0, 2), (0, 3)]

答案 1 :(得分:3)

您还需要用','分割字符串。

>>> [tuple(map(int, s.split(','))) for s in myList]                                                                               
[(0, 1), (0, 2), (0, 3)]

另一种选择是使用csv模块。

>>> import csv                                                                                                                    
>>> list(csv.reader(myList))                                                                                                      
[['0', '1'], ['0', '2'], ['0', '3']]
>>> [tuple(map(int, row)) for row in csv.reader(myList)]                                                                          
[(0, 1), (0, 2), (0, 3)]

如果结果的内部元素不是元组并且它们的类型为int,那么并不是很重要,我们可以将csv解决方案简化为

>>> list(csv.reader(myList, quoting=csv.QUOTE_NONNUMERIC))                                                                        
[[0.0, 1.0], [0.0, 2.0], [0.0, 3.0]]

〜编辑〜

thelogicalkoan's answer让我想起ast.literal_eval,它在这里提供了最优雅(最安全)的解决方案。

>>> from ast import literal_eval                                                                                                  
>>> [literal_eval(x) for x in myList]                                                                                             
[(0, 1), (0, 2), (0, 3)]

答案 2 :(得分:1)

另一种解决方案是使用ast.literal_eval(而不是eval,它可能被认为是不安全的):

>>> import ast
>>> ast.literal_eval('0,1')
(0, 1)

因此,您可以这样做:

>>> my_list = ['0,1', '0,2', '0,3']
>>> result = [ast.literal_eval(x) for x in my_list]
>>> result
[(0, 1), (0, 2), (0, 3)]

答案 3 :(得分:1)

str.partition可用于执行此操作。

>>> [(int(x), int(y)) for x, _, y in (z.partition(',') for z in myList)]
[(0, 1), (0, 2), (0, 3)]

生成器表达式(z.partition(',') for z in myList)在列表的每个元素上生成str.partition的输出,然后在所需的部分上调用int

答案 4 :(得分:0)

这是另一种选择:

myList = ['0,1', '0,2', '0,3']

def tSet(list): 
    return tuple([int(i) for i in list])

resList  = [tSet(i.split(",")) for i in myList]

print(resList) #Output: [(0, 1), (0, 2), (0, 3)]