你如何改变python列表中的项目?

时间:2015-06-03 09:41:43

标签: python list sorting

我有这个代码,我想知道如何附加列表,以便我可以按数字排序,从高到低

data=['red' '1', 'blue' '8', 'green' '2', 'orange' '6']

我想知道如何通过更改列表中的项目,按照从高到低的数字对列表进行排序,使数字在颜色之前,以便可以简单地从高到低排序。

以下列表应如何:

data=['1' 'red', '8' 'blue', '2' 'green' ,'6' 'orange']

2 个答案:

答案 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')]