我正在寻找一个可以对列表进行排序的代码,例如list x,其中包含整数和字符串。然后,代码将对列表x进行排序,以便对应于该字符串对整数值进行排序。到目前为止,我已尝试过这段代码,但它不起作用。
x =["a" 2,"c" 10, "b" 5]
x.sort()
print (x)
我希望结果是
["a" 2 "b" 5 "C" 10]
所以列表按加号顺序按数字排序,字符串也打印出来。
答案 0 :(得分:1)
使用元组列表,然后根据您的需要对它们进行排序,例如:
x = [('b',5),('a',2),('c',10)]
x.sort() # This will sort them based on item[0] of each tuple
x.sort(key=lambda s: s[1]) # This will sort them based on item[1] of each tuple
另一种方法是使用字典而不是元组列表,例如:
x = {'b':5,'a':2,'c':10}#This will be automatically sorted based on the key of each element
如果你打印x,你会得到:
{'a': 2, 'c': 10, 'b': 5}
如果你想根据每个元素的值对它们进行排序,那么:
x = sorted(x.items(), key=lambda s:s[1])
这将创建一个新的元组列表,因为sorted()返回“new”排序列表,因此结果将是:
[('a', 2), ('b', 5), ('c', 10)]
答案 1 :(得分:0)
如果我正确扣除,你也希望结果列表有一个整数,其中原始列表有一个整数(字符相同)。
我认为没有一种开箱即用的方法可以做到这一点。一种可能的方法是将列表分成另外两个:一个是整数,一个是字符。然后,在对每个列表进行排序后,您可以根据所需的整数和字符位置合并它们。
答案 2 :(得分:0)
使用嵌套的iterable将字母与数字配对,然后按第二个元素对项目进行排序:
# just pairs.sort(key = lambda x: x[1])
pairs = [('a', 2), ('c', 10), ('b', 5)]
答案 3 :(得分:0)
我认为元素是分开的。以下代码可能有所帮助,您可以根据需要填写或删除except块中的print语句。
x =["a", 2,"c", 10, "b", 5]
numbers = []
letters = []
for element in x:
try:
numbers.append(int(element))
except:
letters.append(str(element))
numbers.sort()
letters.sort()
numbers.reverse()
letters.reverse()
for index,item in enumerate(x):
try:
print int(item),
x[index] = numbers.pop()
except ValueError:
x[index] = letters.pop()
print "\n"+ str(x)