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)

ランキング関数を 1 回通過した後、すべてのリスト値にキーが与えられ、その後これに従ってソートされるという印象を受けました。これは実行されますが、sorted_list の値は None です。私は n00b であるため、根本的な何かが欠けていると思います。何?:-)

事前に助けてくれてありがとう。

4

4 に答える 4

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 に答える
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 に答える
0

resultlist.sortlist のメソッドで、resultlist をその場でソートし、 を返しますNone

sorted_list = sorted(li, key=df) トリックを行う必要があります。

于 2012-09-26T14:03:01.050 に答える