将类型为[(“ ['str']”,int),(“ [''str']”,int)]的列表转换为[('str',int),('str',int)]

时间:2020-02-22 10:35:15

标签: python list

我有一个类型列表

[("['106.52.116.101']", 1), ("['45.136.108.85']", 1)]

并希望将其转换为

[('106.52.116.101', 1), ('45.136.108.85', 1)]

4 个答案:

答案 0 :(得分:2)

有多种解决方法,例如,您可以这样做:

lst = [("['106.52.116.101']", 1), ("['45.136.108.85']", 1)]
new = [(l[0][2:-2], l[1]) for l in lst]
print(new)

输出:

[('106.52.116.101', 1), ('45.136.108.85', 1)]

答案 1 :(得分:0)

Mateen Ulhaq 已经提出了一个非常简短且很好的解决方案。

但是,如果数组中并不总是包含一项,则可以使用以下方法:

[(eval(s)[0], n) for s, n in list]

eval()解释python代码时,字符串在语法上必须正确。如果这些字符串是基于用户的安全性,也请pay attention

答案 2 :(得分:0)

您可以如下使用string的split():

lst = [("['106.52.116.101']", 1), ("['45.136.108.85']", 1)]
print(lst)
new_lst = [(first.split('\'')[1], sec)for first, sec in lst]
print(new_lst)

输出

[("['106.52.116.101']", 1), ("['45.136.108.85']", 1)]                                                                   
[('106.52.116.101', 1), ('45.136.108.85', 1)] 

答案 3 :(得分:0)

您可以使用ast.literal_eval

from ast import literal_eval

l = [("['106.52.116.101']", 1), ("['45.136.108.85']", 1)]
l = [(literal_eval(f)[0], s) for f, s in l]
l

输出:

[('106.52.116.101', 1), ('45.136.108.85', 1)]