1

こんにちは私は2つの質問があります:

  1. つまり、フォームの例を使用して2つのセットを作成しようとしていますnew = [{24,33},{12,13},{17,19},....]。基本的に、1つはと呼ばれN = [24,12,17,....]、もう1つはと呼ばれる2つのリストの形式のデータがありz = [33,13,19,....]ます。私はこれを使用してこれを達成しようとしています:

    new=[]
    for i in range(len(z)):
        new.append({z[i]})
        new.extend({N[i]})
    print(new)
    

    中括弧の有無にかかわらず、追加と拡張の多くのバリエーションを試しました。

  2. 1)が達成されたら、各セットの2番目のアイテムのサイズ(zの昇順)に従って新しいものを並べ替えたいので、次のようにします。

    new=[{12,13},{17,19},{24,33}]
    
4

4 に答える 4

3

zip()2 つのリストをペアにするために使用します。

new = [{a, b} for a, b in zip(N, z)]

ただし、セットは順序付けされていないため、「2 番目の値」はありません。おそらく最小値でソートできます:

new.sort(key=lambda s: min(s))

の値で並べ替える必要がある場合はz、セットを作成する前に行います。

from operator import itemgetter

new = [{a, b} for a, b in sorted(zip(N, z), key=itemgetter(1))]

しかし、これらが実際に x、y 座標である場合は、 and を使用zip()sorted()て一連のタプルを取得します。

new = sorted(zip(N, z), key=itemgetter(1))

Aset()には一意の値のみが含まれます。

>>> {1, 1}
set([1])

タプルは順序付けられた (不変の) シーケンスです。

>>> (1, 1)
(1, 1)
于 2013-03-07T13:53:38.740 に答える
2

最初のものは簡単です:

new = [set(x) for x in zip(N,z)]

セットは順序付けされていないため、セットを作成する前に2 番目の処理を実際に行う必要があります。

new = [set(x) for x in sorted(zip(N,z),key=lambda x:x[1])]

また

import operator
new = [set(x) for x in sorted(zip(N,z),key=operator.itemgetter(1))]

嫌いな人のためにlambda


また、実際にこれを使用するかどうかも不明ですsetstuplea の方が良いと思います。その場合は、sortedステップを使用してください。

new = sorted(zip(N,z),key=lambda x:x[1])

セットは順序を維持せず、インデックス化できないため、どの要素がどの要素であるかを知る方法がないため、ペアを保持するための非常に優れたデータ構造を作成しx-yませんxy

于 2013-03-07T13:53:47.880 に答える
1
>>> list(map(set, zip(N, z)))
[{24, 33}, {12, 13}, {17, 19}]

次に、2番目のアイテムのサイズに応じて新しいものを再配置したいと思います

セットは順序付けされていないため、「2 番目の項目」などはありません。

2 つの項目の順序が重要な場合は、セットではなくタプルを使用する必要があります。

2 番目の要素の大きさに従ってタプルを並べ替えるには、次のようにします。

>>> sorted(zip(N, z) , key=lambda x:x[1])
[(12, 13), (17, 19), (24, 33)]
于 2013-03-07T13:55:30.500 に答える
1

セット(2 つの値が異なる必要があり、順序がない場合) は必要ありませんが、タプル (単に 2 つのアイテムが次々と来る) が必要です。

zip関数を使用しsortedて並べ替えるには:

>>> z = [24, 12, 17]
>>> N = [33, 13, 19]
>>> sorted(zip(z, N), key=lambda tpl: tpl[1])
[(12, 13), (17, 19), (24, 33)]
于 2013-03-07T13:57:37.520 に答える