最近很多小伙伴都在问Python-如何对字符串列表进行排序?和python字符串列表排序这两个问题,那么本篇文章就来给大家详细解答一下,同时本文还将给你拓展Python-如何对字符串列表进行数字排序?
最近很多小伙伴都在问Python-如何对字符串列表进行排序?和python 字符串列表排序这两个问题,那么本篇文章就来给大家详细解答一下,同时本文还将给你拓展Python-如何对字符串列表进行数字排序?、Python-如何根据字典的值对字典列表进行排序?、Python如何对元组列表进行排序?、Python如何对集合列表进行排序?等相关知识,下面开始了哦!
本文目录一览:- Python-如何对字符串列表进行排序?(python 字符串列表排序)
- Python-如何对字符串列表进行数字排序?
- Python-如何根据字典的值对字典列表进行排序?
- Python如何对元组列表进行排序?
- Python如何对集合列表进行排序?
Python-如何对字符串列表进行排序?(python 字符串列表排序)
如何解决Python-如何对字符串列表进行排序??
基本答案:
mylist = ["b", "C", "A"]
mylist.sort()
这会修改你的原始列表(即就地排序)。要获得列表的排序副本,而无需更改原始副本,请使用以下sorted()
函数:
for x in sorted(mylist):
print x
但是,上面的示例有些天真,因为它们没有考虑区域设置,而是执行区分大小写的排序。你可以利用可选参数key指定自定义排序顺序(使用cmp
,则是不推荐使用的解决方案,因为它必须多次评估- key每个元素仅计算一次)。
因此,要根据当前语言环境进行排序,并考虑到特定于语言的规则(这cmp_to_key
是functools
的帮助函数):
sorted(mylist, key=cmp_to_key(locale.strcoll))
最后,如果需要,你可以指定自定义语言环境进行排序:
import locale
locale.setlocale(locale.LC_ALL, ''en_US.UTF-8'') # vary depending on your lang/locale
assert sorted((u''Ab'', u''ad'', u''aa''),
key=cmp_to_key(locale.strcoll)) == [u''aa'', u''Ab'', u''ad'']
最后要注意的是:你将看到使用该lower()
方法的不区分大小写的排序示例-这些是不正确的,因为它们仅适用于ASCII字符集。对于任何非英语数据,这两个错误:
# this is incorrect!
mylist.sort(key=lambda x: x.lower())
# alternative notation, a bit faster, but still wrong
mylist.sort(key=str.lower)
解决方法
在Python中创建按字母顺序排序的列表的最佳方法是什么?
Python-如何对字符串列表进行数字排序?
我知道这听起来微不足道,但是我没有意识到sort()Python
的功能很奇怪。我有一个实际上是字符串形式的“数字”列表,因此我先将它们转换为整数,然后尝试进行排序。
list1=["1","10","3","22","23","4","2","200"]for item in list1: item=int(item)list1.sort()print list1
给我:
[''1'', ''10'', ''2'', ''200'', ''22'', ''23'', ''3'', ''4'']
我想要的是
[''1'',''2'',''3'',''4'',''10'',''22'',''23'',''200'']
我四处寻找与排序数字集相关的算法,但是我发现所有算法都涉及对字母数字集进行排序。
我知道这可能是个没有脑子的问题,但是google和我的教科书没有提供比该.sort()功能有用的功能。
答案1
小编典典您实际上尚未将字符串转换为int。或者说,您做了,但是对结果却什么也没做。您想要的是:
list1 = ["1","10","3","22","23","4","2","200"]list1 = [int(x) for x in list1]list1.sort()
如果由于某种原因需要保留字符串而不是整数(通常是一个坏主意,但是可能需要保留前导零或其他东西),则可以使用键函数。sort接受一个命名参数,key该参数是在比较每个元素之前对其进行调用的函数。比较键函数的返回值,而不是直接比较列表元素:
list1 = ["1","10","3","22","23","4","2","200"]# call int(x) on each element before comparing itlist1.sort(key=int)
Python-如何根据字典的值对字典列表进行排序?
我有一个字典列表,希望每个项目都按特定的属性值排序。
考虑下面的数组,
[{''name'':''Homer'', ''age'':39}, {''name'':''Bart'', ''age'':10}]
当排序name,应该成为
[{''name'':''Bart'', ''age'':10}, {''name'':''Homer'', ''age'':39}]
答案1
小编典典使用密钥而不是cmp看起来更干净:
newlist = sorted(list_to_be_sorted, key=lambda k: k[''name''])
或如JFSebastian和其他人所建议的,
from operator import itemgetternewlist = sorted(list_to_be_sorted, key=itemgetter(''name''))
为了完整性(如fitzgeraldsteele的评论中指出的那样),请添加reverse=True降序排列
newlist = sorted(l, key=itemgetter(''name''), reverse=True)
Python如何对元组列表进行排序?
从经验上讲,似乎Python的默认列表排序器在传递元组列表时将按每个元组中的第一个元素进行排序。那是对的吗?如果不是,按元组的第一个元素对元组列表进行排序的正确方法是什么?
Python如何对集合列表进行排序?
Python通过按顺序查看元组的元素来对元组列表进行排序。由于集合是无序的,Python如何对集合列表进行排序?
编辑:帖子中的问题和可接受的答案较为笼统,给出的文件也很深入。我的问题不是重复的。
答案1
小编典典无论列表中有什么内容,元素的__lt__
方法都是唯一参考的比较方法。对于集合,a <b
意味着“a
是”的适当子集,b
不足以定义总顺序。这就是为什么结果通常是不确定的。可能是原始列表的任何排列,与实现恰好适用__lt__
于哪些列表元素对一致。
如果对于列表中的每对集合,一个实际上是另一个的适当子集,则列表将从最小(基数)集合到最大集合进行排序。否则,无话可说。例如:
>>> sorted([{5, 6}, {3, 4}, {5}, {3}]) # nothing changes[{5, 6}, {3, 4}, {5}, {3}]
发生的情况是未定义实现细节的结果。自从我撰写本文以来list.sort()
,我知道在这种情况下会发生什么,但是不能保证总是这样工作:
首先,实现询问“是{3, 4} < {5, 6}
”。否,因此前两个元素的顺序与已经排序一致。接下来询问“是{5} < {3,4}
?”。否,因此前三个元素似乎已经被排序。最后,它询问“是{3} <{5}
?”。再没有,因此原始列表的整个顺序与已经排序的顺序是一致的,并且没有任何变化。
将来的实现可能例如询问“是{5} < {5, 6}
?”。在某个时候,并且由于“是”,所以决定{5}
需要出现在之前{5,6}
。因此,结果根本没有定义。
关于Python-如何对字符串列表进行排序?和python 字符串列表排序的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于Python-如何对字符串列表进行数字排序?、Python-如何根据字典的值对字典列表进行排序?、Python如何对元组列表进行排序?、Python如何对集合列表进行排序?等相关知识的信息别忘了在本站进行查找喔。
本文标签: