0

对 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,我缺少一些基本的东西。什么?:-)

我在这里先向您的帮助表示感谢。

4

4 回答 4

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]
于 2012-09-26T14:02:47.797 回答
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']

于 2012-09-26T14:07:59.820 回答
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))

:-)

[/编辑]

于 2012-09-26T14:29:04.763 回答
0

resultlist.sort是 list 的一个方法,对 resultlist 进行就地排序,然后返回None.

sorted_list = sorted(li, key=df) 应该做的伎俩。

于 2012-09-26T14:03:01.050 回答