我有这个代码,我想知道如何附加列表,以便我可以按数字排序,从高到低
data=['red' '1', 'blue' '8', 'green' '2', 'orange' '6']
我想知道如何通过更改列表中的项目,按照从高到低的数字对列表进行排序,使数字在颜色之前,以便可以简单地从高到低排序。
以下列表应如何:
data=['1' 'red', '8' 'blue', '2' 'green' ,'6' 'orange']
答案 0 :(得分:2)
如果您实际上有8个单独的项目,并希望按数字从高到低排序,您可以使用iter对它们进行分组,从而颠倒顺序:
(
但是你最好把元素保留在元组中:
Executing SQL script in server
ERROR: Error 1064: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ')
REFERENCES `motivian`.`user` ()
ON DELETE NO ACTION
ON UPDATE NO A' at line 8
SQL Code:
CREATE TABLE IF NOT EXISTS `motivian`.`calculation` (
`category_id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`calc` VARCHAR(100) NOT NULL,
`user_id` INT NULL,
`date_created` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`category_id`),
CONSTRAINT `user_id`
FOREIGN KEY ()
REFERENCES `motivian`.`user` ()
ON DELETE NO ACTION
ON UPDATE NO ACTION)
SQL script execution finished: statements: 8 succeeded, 1 failed
Fetching back view definitions in final form.
Nothing to fetch
如果您的数据实际上是已发布,请使用itertools创建配对,广告实际上正确排序将数字转换为int:
data=['red', '1', 'blue', '8', 'green' ,'2', 'orange','6']
from itertools import chain
it = iter(data)
grouped = zip(it, it)
data = sorted(((b, a) for a,b in grouped),
key=lambda x: int(x[0]),reverse=True))
print(list(chain(*data)))
['8', 'blue', '2', 'green', '1', 'red']
或以字符串形式重新加入:
print(data)
[('8', 'blue'), ('2', 'green'), ('1', 'red')]
答案 1 :(得分:0)
首先,您应该选择一个代表数字和颜色对的正确数据结构,例如tuple。您可以通过用逗号分隔项目并将它们括在括号中来制作元组:
data = [('red', 1), ('blue', 8), ('green', 2), ('orange', 6)]
(请注意,我还删除了数字周围的引号,因此它们实际上是数字,而不是字符串。)
交换颜色和数字:
>>> [(number, color) for color, number in data]
[(1, 'red'), (8, 'blue'), (2, 'green'), (6, 'orange')]
按数字排序,从低到高:
>>> sorted((number, color) for color, number in data)
[(1, 'red'), (2, 'green'), (6, 'orange'), (8, 'blue')]
按数字排序,从高到低:
>>> sorted(((number, color) for color, number in data), reverse=True)
[(8, 'blue'), (6, 'orange'), (2, 'green'), (1, 'red')]