Pythonで任意のサイズの空の配列を取得するにはどうすればよいですか?


120

基本的に私はこれと同等のPythonをCで望んでいます:

int a[x];

しかしPythonでは私は次のような配列を宣言します:

a = []

そして問題は私が次のような値でランダムなスロットを割り当てたいです:

a[4] = 1

しかし、配列が空であるため、Pythonではそれを行うことはできません。

回答:


239

「配列」が実際にPythonリストを意味する場合は、

a = [0] * 10

または

a = [None] * 10

91
注意しなければならないことの1つa = [obj] * Nは、同じobjが配列の各要素に現れるということです。変更可能なオブジェクトで、1つのアイテムを変更すると、すべてが変更されます。...しかし、整数(またはその他の不変タイプ)を使用するこの例では、違いはありません。または、要素に割り当てるだけでも問題ありません。(私はあまりにも頻繁にそれをやったので、私はそれについて言及します:))
dappawit

4
私の最初のPythonプロジェクト、@ dappawitでそれは私に一生懸命噛みました この警告に注意してください。
ネイト

オブジェクトの同じ参照を作成します
Amr Alaa 2017

22

あなたがPythonで望むことを正確に行うことはできません(私があなたを正しく読んだ場合)。リストの要素ごとに値を配置する必要があります(または、配列と呼びます)。

しかし、これを試してください:

a = [0 for x in range(N)]  # N = size of list you want
a[i] = 5  # as long as i < N, you're okay

他のタイプのリストの場合は、0以外のものを使用することも Noneよくあります。


2
この答えは不正確なものに接しています。range(N)Python <3.0の場合、リストはすでに生成されます。
アパララ

1
確かに、それはリストを生成します。効率が心配な場合はxrange(N)、Python 2.xで使用できます。しかし、それが不正確なものとどのように接しているかはわかりません。a = range(N)すべての要素が賢明な「デフォルト」で始まるので、私はそれを好みます。それは意見の問題だと思います。
dappawit


7

リストを宣言して各要素を追加するだけです。例:

a = []
a.append('first item')
a.append('second item')

5
では、どのように「ランダムスロットを割り当てる」か
Tdelang

5

リストの拡張メソッドでそれを拡張することもできます。

a= []
a.extend([None]*10)
a.extend([None]*20)

1

あなた(またはこの質問の他の検索者)が整数で埋める連続した配列を作成することに実際に関心がある場合は、bytearraymemoryivewを検討してください

# cast() is available starting Python 3.3
size = 10**6 
ints = memoryview(bytearray(size)).cast('i') 

ints.contiguous, ints.itemsize, ints.shape
# (True, 4, (250000,))

ints[0]
# 0

ints[0] = 16
ints[0]
# 16

1
x=[]
for i in range(0,5):
    x.append(i)
    print(x[i])

2
このコードは問題を解決する可能性がありますが、これが問題を解決する方法と理由の説明含めると、投稿の品質が向上し、おそらくより多くの投票が得られます。あなたが今尋ねている人だけでなく、あなたが将来の読者のための質問に答えていることを忘れないでください。回答を編集して説明を追加し、適用される制限と前提を示してください。
Daniil、

0

Cスタイルの配列が実際に必要な場合

import array
a = array.array('i', x * [0])
a[3] = 5
try:
   [5] = 'a'
except TypeError:
   print('integers only allowed')

Pythonには、初期化されていない変数の概念がないことに注意してください。変数は値にバインドされた名前なので、その値には何かが必要です。上記の例では、配列はゼロで初期化されています。

ただし、低レベルのものに実際に必要でない限り、これはPythonでは一般的ではありません。他の回答が示唆するように、ほとんどの場合、空のリストまたは空のnumpy配列を使用する方がベターです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.