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



我有这样的东西:-

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

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

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

假设您将其存储在名为"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]]

回滚前更改的问题:对异构列表进行排序

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

如果要对异构列表进行排序,可以提供返回元组的自定义键。第一个元素对于字符串01用于整数。这样,字符串将出现在整数之前。如果对象是整数,则第二个元素设置为 -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。如果元素既不是字符串也不是整数,它将在 Python3 上失败。

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

您可以使用带有三元运算符的嵌套列表推导来检查字符串是否看起来像整数:

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

最新更新