37

作成しようとしているプログラムの「メイン」リストのようなものである単一のリストに追加したいリストがたくさんあります。10のようにではなく、1行のコードでこれを行う方法はありますか?私は初心者なのでわかりません...

私の質問をよりよく理解するために、これらのリストがある場合はどうなりますか?

x = [1, 2, 3]
y = [4, 5, 6]
z = [7, 8, 9]

そして、yとzをxに追加したいと思います。行う代わりに:

x.append(y)
x.append(z)

1行のコードでこれを行う方法はありますか?私はすでに試しました:

x.append(y, z)

そして、それは機能しません。

4

7 に答える 7

58
x.extend(y+z)

あなたがしたいことをする必要があります

また

x += y+z

あるいは

x = x+y+z
于 2013-01-03T00:57:58.410 に答える
22

sum開始値(空のリスト)が示されている関数を使用できます。

a = sum([x, y, z], [])

これは、任意の数のリストを追加する場合に特に適しています。

于 2017-01-19T21:59:32.043 に答える
19

コメントを拡張する

In [1]: x = [1, 2, 3]
In [2]: y = [4, 5, 6]
In [3]: z = [7, 8, 9]
In [4]: from itertools import chain
In [5]: print list(chain(x,y,z))
[1, 2, 3, 4, 5, 6, 7, 8, 9]
于 2013-01-03T01:09:26.870 に答える
3

追加の効果を正確に再現するには、次の関数を簡単かつ効果的に試してください。

a=[]
def concats (lists):
    for i in lists:
        a==a.append(i)


concats ([x,y,z])
print(a)
于 2019-03-16T15:11:14.200 に答える
1

上記の回答と同等ですが、言及する価値があるほど十分に異なります。

my_map = {
   'foo': ['a', 1, 2],
   'bar': ['b', '2', 'c'],
   'baz': ['d', 'e', 'f'],
} 
list(itertools.chain(*my_map.values()))
['d', 'e', 'f', 'a', 1, 2, 'b', '2', 'c']

上記の式で、*はチェーンへの引数として結果をグロッキングするために重要です。これは前のchain(x、y、z)と同じです。また、結果はハッシュ順に並べられていることに注意してください。

于 2016-01-07T21:48:28.253 に答える
1

もう少し機能的なアプローチを好む場合は、次のことを試すことができます。

import functools as f

x = [1, 2, 3]
y = [4, 5, 6]
z = [7, 8, 9]

x = f.reduce(lambda x, y: x+y, [y, z], x)

これにより、任意の数のリストをリストに連結できますx

任意の数のリストを一緒に連結したい場合(つまり、いくつかのベースリストに連結したくない場合)、次のように簡略化できます。

import functools as f
from operator import add
big_list = f.reduce(add, list_of_lists)

私たちのBFDLには、ラムダ、リデュース、およびフレンドに関して彼の予約があることに注意してください:https ://www.artima.com/weblogs/viewpost.jsp?thread=98196

この回答を完了するには、ドキュメントでreduceの詳細を読むことができます:https ://docs.python.org/3/library/functools.html#functools.reduce

私は引用します:「シーケンスを単一の値に減らすために、左から右へ、シーケンスの項目に累積的に2つの引数の関数を適用します。」

PS https://stackoverflow.com/a/41752487/532513sum()で説明されているように使用すると、非常にコンパクトで、リストで機能するように見え、非常に高速です(https://stackoverflow.com/a/33277438/532513を参照) 。しかし、Python 3.6では、次のように言うことができます。help(sum)

この関数は、特に数値での使用を目的としており、数値以外の型を拒否する場合があります。

これは少し心配ですが、リストを連結するための最初のオプションとしておそらくそれを維持します。

于 2018-05-23T12:00:10.313 に答える
0

一行で、それは次の方法で行うことができます

x.extend(y+z)

また

x=x+y+z
于 2018-05-28T04:05:00.263 に答える