15

私はPythonにかなり慣れていません。個別のリストの一意の値を 1 つのリストにマージする関数を作成しようとしています。リストのタプルの結果を取得し続けます。最終的には、3 つのリスト -a、b、c から一意の値のリストを 1 つ取得したいと考えています。誰か私に手を貸してくれませんか?

def merge(*lists):
    newlist = lists[:]
    for x in lists:
        if x not in newlist:
            newlist.extend(x)
    return newlist

a = [1,2,3,4]
b = [3,4,5,6]
c = [5,6,7,8]

print(merge(a,b,c))

リストのタプルを取得しています

([1, 2, 3, 4], [3, 4, 5, 6], [5, 6, 7, 8])
4

4 に答える 4

19

セットが必要なだけかもしれません:

>>> a = [1,2,3,4]
>>> b = [3,4,5,6]
>>> c = [5,6,7,8]
>>>
>>> uniques = set( a + b + c )
>>> uniques
set([1, 2, 3, 4, 5, 6, 7, 8])
>>>
于 2013-04-04T04:42:43.240 に答える
5

それらが元の順序であることを気にしない場合、最も簡単でおそらく断食する方法は、set 関数を使用することです。

>>> set().union(a, b, c)
{1, 2, 3, 4, 5, 6, 7, 8}

元の順序を気にする場合 (この場合、セットはたまたまそれを保持しますが、保証されません)、引数に渡したすべての元のリストのタプルが含まれていることを認識して、元の試行を修正できますlists。 . これは、それを反復すると、リスト内の要素ではなく、一度に 1 つずつリストを取得することを意味します - itertools モジュールを使用してこれを修正できます:

for x in itertools.chain.from_iterable(lists):
   if x not in newlist:
      newlist.append(x)

また、newlist入力リストのコピーではなく、空のリストとして開始することをお勧めします。

于 2013-04-04T04:54:34.237 に答える
0
def merge(*lists):
    newlist = []
    for i in lists:
            newlist.extend(i)
    return newlist

merge_list = merge(a,b,c,d)

merge_list = set(merge_list)

merge_list = list(merge_list)

print(merge_list)
于 2013-04-07T05:22:09.083 に答える
0

動的に生成されたリストのリストの処理

一般的な使用例は、リストのリストを動的に生成することです。各子リストは、任意の長さを持つ場合があります。

import random
abc, values = [], ["a", "b", "c", "d"]
for i in range(3):
    l = []
    for j in range(3):
        l.append(values[random.randint(0, len(values) - 1)])
    abc.append(l)

リストのリストを操作している場合、gddc によって提案されているようにそれらを単純に合計しても機能しません。あれは:

uniques = set( a + b + c )

a問題は、リスト、b、およびを具体的に参照する必要があるという事実から生じますc。Ivc による回答は非常に素晴らしく、私たちを近づけてくれます。

set().union(a, b, c)

ただし、リストを明示的に参照する必要があります。

ソリューション

任意の長さのリストのリストから一意の値を取得するには、位置拡張を使用できます。

import random
abc, values = [], ["a", "b", "c", "d"]
for i in range(3):
    l = []
    for j in range(3):
        l.append(values[random.randint(0, len(values) - 1)])
    abc.append(l)
# The Important Line Below
unique = set().union(*abc)
print(unique)

適切な値を順不同で返します(例["d", "b", "a", "d"]

于 2018-08-09T23:38:09.990 に答える