对Python很新,并且一直在使用列表和排序成员。我的问题是,如果我有一个随机字符串列表(所有相同长度的字符串):
li=["hgjtud", "iernfd", "scoeps", "stiiss", "stripe"]
现在我想根据我用以下函数定义的某个等级对该列表进行排序:
def rank_string(str1,str2):
rank=0
for i in range(len(str1)): #all strings will be checked to be equal length
if (str1[i]==str2[i]):
rank += 1
return rank
现在我想使用此函数和目标字符串对列表进行排序,因此我尝试以下操作:
target_string="stripe"
df = lambda x:rank_string(x,target_string)
sorted_list = resultlist.sort(key=df)
我的印象是,在排名函数一次通过后,所有列表值都将被赋予一个键,然后按照这个排序?这会运行,但sorted_list的值为None。我假设那是一个n00b,我遗漏了一些基本的东西。什么? :-)
感谢您的帮助。
答案 0 :(得分:1)
.sort()
方法对就地进行排序,但不会返回任何内容。
如果您希望返回已排序的列表并保持原始输入列表不变,请使用sorted()
。
>>> a = [2, 3, 1]
>>> a.sort()
>>> a
[1, 2, 3]
>>> b = [2, 3, 1]
>>> sorted(b)
[1, 2, 3]
>>> b
[2, 3, 1]
答案 1 :(得分:1)
正如其他人所说,sorted()
将返回一个新列表。您的代码可能如下所示:
li = ["hgjtud", "iernfd", "scoeps", "stiiss", "stripe"]
target_string = "stripe"
sorted_list = sorted(li, key=lambda x: sum(1 for c1,c2 in zip(x, target_string) if c1==c2))
返回['hgjtud', 'iernfd', 'scoeps', 'stiiss', 'stripe']
答案 2 :(得分:1)
与其他人说的一样,使用sorted()
。你也可以缩短时间:
from functools import partial
def rank_string(str1, str2):
return sum(a == b for a, b in zip(str1, str2))
li = ["hgjtud", "iernfd", "scoeps", "stiiss", "stripe"]
sorted_list = sorted(li, key=partial(rank_string, "stripe"))
[编辑]
from operator import eq
def rank_string(str1, str2):
return sum(map(eq, str1, str2))
: - )
[/编辑]
答案 3 :(得分:0)
resultlist.sort
是一种列表方法,对结果列表进行排序,并返回None
。
sorted_list = sorted(li, key=df)
应该做的。