Python 排序和反转不在列表上工作

Python 排序和反转不在列表上工作,python,list,sorting,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 问题是用户名列表永远不会被排序。我试过使用sortedusernames,但仍然没有排序 usernames.cs

我创建了以下脚本:

#!/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
问题是用户名列表永远不会被排序。我试过使用sortedusernames,但仍然没有排序

usernames.csv:

fry bender zoidberg leela hermes nibbler艾米

问题是,用户名不是一个列表,而是一个元组,只有一个条目,我认为排序不会有任何效果

如果这就是usernames.csv中的全部内容,请不要使用csv模块,只需读取文件并在逗号上拆分行,然后进行排序

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

print(usernames)
元组不是用来排序的。使用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()
这是因为用户名是一个元组列表,如果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

您正在使用maptuple、reader创建一个元组列表,因此您不是在对列表进行排序,而是在对元组列表进行排序。您可以按照自己的意愿对元组重新排序,但所有值都位于一个元组中。元组也是不可变的,因此不能对元组进行适当排序


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

您可以使用旧的成本,主要是您只需要多行代码,使列表成为列表,然后返回字符串:

#!/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

@NightShadeQueen Yesprint lenusernames。您正在对包含一个具有用户名的元组的列表进行排序。超级快速的答案为您指明了正确的方向。@scorreia哦,这就是问题所在,谢谢。为什么要创建一个列表,然后只选择第一个元素?似乎是浪费。这只是对老年退休金问题和他的方法的最小修改。为什么不向他们展示一个更好的方法呢?人们来到这里希望在答案中找到合理的代码。我添加了另一种更直观的方法。谢谢你的反馈!感谢您简单优雅的解决方案,问题解决了!对于需要反转列表的情况,可以使用reversedusernames.sort中的反转函数