1

以前に分割して再度一致させた 2 つのリストを比較したいと考えています。

2 つのリストがあります。分割されていないものと分割されたもの

 list1 = ['store1 120', 'store2 140', 'store3 160', 'store4 150']
 list2 = [120, 140, 150, 160]

2 番目のリストは既に int に変換され、サイズでソートされています。「store1 120」は「120」と最も共通点があり、文字列全体を返すため、2 つのリストを比較できるかどうかを確認したいので、再度分割して店舗名だけを返すことができます。これら 2 つのリストを比較して、最も類似したリストを返すにはどうすればよいですか? ほとんどの検索では、あまり役に立たない単一の整数リストが返されるだけです。

編集:明確にするために、すでに変更されたリストから番号を取得し、同様のリストの関連付けられた場所を返すことができるものが必要でした。元のリストは変わる可能性があり、変わる可能性があるため、定義済みの定義ではなく入力に依存する必要がありました。

4

4 に答える 4

2

考慮すべきいくつかのこと

  1. 最初のリストは、2 番目のリストにある名前と番号を連結したものです。
  2. 数字は常に文字列の最後にあります
  3. 最初のリストの各項目をリストで検索するのはあまり効率的ではありません

解決

  1. (1)と(2)を解決するには、スペースで適切なパーティションを実行し、名前と番号を抽出するだけです
  2. (3)を解決するには、リストの代わりにセットを使用します

デモ

>>> list2 = [120, 140, 150, 160]
>>> set2 = set(list2)
>>> for e in list1:
    name, _, num = e.rpartition(' ')
    if int(num) in set2:
        print name


store1
store2
store3
store4
于 2013-10-08T03:04:35.047 に答える
0

答えを探す際の効率については言及されていないので、list2 のすべての番号について、list1 にその番号のストアがあるかどうかを確認してください。

list1 = ['store1 120', 'store2 140', 'store3 160', 'store4 150']
list2 = [120, 140, 150, 160]

for number in list2:
    for store in list1:
        if str(number) in store:
            print 'number:', number, 'store:', store.split()[0]

プロデュース:

>>> 
number: 120 store: store1
number: 140 store: store2
number: 150 store: store4
number: 160 store: store3
>>> 

店舗名を番号で並べ替えるだけの場合は、list.sort() を使用します。

list1.sort(key = lambda item: item.split()[1])
print '\n'.join(item.split()[0] for item in list1)
于 2013-10-08T03:11:54.387 に答える