排序和撤消不在列表

时间:2015-07-09 14:35:28

标签: python list sorting

我已经创建了这个脚本:

#!/usr/bin/python

import csv

with open("files/usernames.csv", "r") as fh1:
    reader = csv.reader(fh1)
    usernames = map(tuple, reader)
    usernames.sort()
    print usernames

问题是usernames列表永远不会被排序。我已尝试使用sorted(usernames),但仍然没有排序。

usernames.csv:

  

鱼苗,弯管机,zoidberg,里拉,Hermes的,冲切,艾美

5 个答案:

答案 0 :(得分:1)

问题在于usernames不是一个列表(它是我认为的一个项目的元组),因此排序它不会实现任何目标。

如果usernames.csv中的所有内容真的不在乎csv模块,只需阅读文件并在逗号上拆分行,然后排序;

with open("files/usernames.csv", "r") as fh1:
    usernames = fh1.read().split(",")
    usernames.sort()

print(usernames)

答案 1 :(得分:0)

这是因为usernames是一个元组列表,如果csv中只有一行,它只有一个元组。它可能看起来像 -

[('fry', 'bender', 'zoidberg', 'leela', 'hermes', 'nibbler', 'amy')]

所以,当你要求python对列表进行排序时,它已经被排序,因为它只包含1个元素,1个元组。

也许你应该创建一个用户名列表。示例 -

with open("files/usernames.csv", "r") as fh1:
    reader = csv.reader(fh1)
    usernames = []
    for u in reader:
        usernames.extend(u)
    usernames.sort()
    print usernames

或者如果它只有一行 -

with open("files/usernames.csv", "r") as fh1:
    reader = csv.reader(fh1)
    usernames = list(reader)[0]
    usernames.sort()
    print usernames

答案 2 :(得分:0)

您正在创建一个包含map(tuple, reader)的元组列表,因此您不会对列表进行排序,而是对元组列表进行排序。您可以按照自己的意愿对元组进行重新排序,但所有值都位于一个元组中。元组也是不可变的,所以你不能对元组进行排序。

尝试将您的值读入列表并对字符串列表进行排序。

答案 3 :(得分:-1)

tuples不适合排序。使用numpy数组或列表:

import csv
import numpy as np

with open("usernames.csv", "r") as fh1:
    reader = csv.reader(fh1)

    usernames = map(np.array, reader)[0]
    print usernames
    usernames.sort()
    print usernames

>> ['fry' 'bender' 'zoidberg' 'leela' 'hermes' 'nibbler' 'amy']
>> ['amy' 'bender' 'fry' 'hermes' 'leela' 'nibbler' 'zoidberg']

修改: 这是另一个可能被认为更简洁的解决方案:

import numpy as np
usernames = np.loadtxt('usernames.csv', dtype=str, delimiter=',') 
usernames.sort()

答案 4 :(得分:-1)

您可以使用旧的成本,大多数情况下您需要额外的几行才能使列表列表成为一个列表然后返回字符串:

#!/usr/bin/python

import csv

with open("files/usernames.csv", "r") as fh1:
    reader = csv.reader(fh1)
    usernames = map(tuple, reader)
    usernames = map(list, usernames[0])
    usernames.sort()
    usernames = map(''.join, usernames)
    print usernames