我有这样的事情: -
List = [["a","1"],["b","2"]]
我想做的是将单个字母整数保持为整数。 所以输出应该像
List = [["a",1],["b",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)
在人们回答第一个版本后,您似乎完全改变了问题。请不要这样做。你可以简单地问一个新问题。
如果要对异构列表进行排序,可以提供返回元组的自定义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 comprehension和ternary 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']]