关于一行中的列表元素的更正(str到int)

时间:2017-11-16 09:30:35

标签: python python-3.x python-2.7 list python-3.5

我有这样的事情: -

List = [["a","1"],["b","2"]]

我想做的是将单个字母整数保持为整数。 所以输出应该像

List =  [["a",1],["b",2]]

2 个答案:

答案 0 :(得分:6)

假设您将其存储在名为“data”的列表中,您可以执行以下操作。

new_data = [[k,int(v)] for k,v in data]

详情请参阅下文:

data =  [["a","1"],["b","2"]]
new_data = [[k,int(v)] for k,v in data]

print new_data

<强>输出:

[['a', 1], ['b', 2]]

答案 1 :(得分:3)

Changed question before rollback:排序异构列表

在人们回答第一个版本后,您似乎完全改变了问题。请不要这样做。你可以简单地问一个新问题。

如果要对异构列表进行排序,可以提供返回元组的自定义key。第一个元素是0表示字符串,1表示整数。这样,字符串就会出现在整数之前。 如果对象是整数,则第二个元素设置为-x,以便按降序对整数进行排序:

def custom_order(x):
    if isinstance(x, int):
        return (1, -x)
    else:
        return (0, x)

print(sorted([1,2,3,4,5,"a","b","c","d"], key=custom_order))
# ['a', 'b', 'c', 'd', 5, 4, 3, 2, 1]

此代码应适用于Python2和Python3。如果元素既不是字符串也不是int,它将在Python3上失败。

原始问题:将嵌套字符串转换为整数

您可以使用nested list comprehensionternary operator来检查字符串looks like an integer

>>> data = [["a","1"],["b","2"]]
>>> [[int(s) if s.isdecimal() else s for s in l] for l in data]
[['a', 1], ['b', 2]]

作为奖励,它可以按任何顺序和任何大小的子列表工作:

>>> data = [["a","1"],["b","2"],["3", "c"], ["4", "5", "d"]]
>>> [[int(s) if s.isdecimal() else s for s in l] for l in data]
[['a', 1], ['b', 2], [3, 'c'], [4, 5, 'd']]