基本的に私はこれと同等のPythonをCで望んでいます:
int a[x];
しかしPythonでは私は次のような配列を宣言します:
a = []
そして問題は私が次のような値でランダムなスロットを割り当てたいです:
a[4] = 1
しかし、配列が空であるため、Pythonではそれを行うことはできません。
基本的に私はこれと同等のPythonをCで望んでいます:
int a[x];
しかしPythonでは私は次のような配列を宣言します:
a = []
そして問題は私が次のような値でランダムなスロットを割り当てたいです:
a[4] = 1
しかし、配列が空であるため、Pythonではそれを行うことはできません。
回答:
「配列」が実際にPythonリストを意味する場合は、
a = [0] * 10
または
a = [None] * 10
あなたが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
よくあります。
range(N)
Python <3.0の場合、リストはすでに生成されます。
xrange(N)
、Python 2.xで使用できます。しかし、それが不正確なものとどのように接しているかはわかりません。a = range(N)
すべての要素が賢明な「デフォルト」で始まるので、私はそれを好みます。それは意見の問題だと思います。
あなたはnumpyを使うことができます:
import numpy as np
空の配列の例:
np.empty([2, 2])
array([[ -9.74499359e+001, 6.69583040e-309],
[ 2.13182611e-314, 3.06959433e-309]])
あなた(またはこの質問の他の検索者)が整数で埋める連続した配列を作成することに実際に関心がある場合は、bytearrayとmemoryivewを検討してください:
# 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
Cスタイルの配列が実際に必要な場合
import array
a = array.array('i', x * [0])
a[3] = 5
try:
[5] = 'a'
except TypeError:
print('integers only allowed')
Pythonには、初期化されていない変数の概念がないことに注意してください。変数は値にバインドされた名前なので、その値には何かが必要です。上記の例では、配列はゼロで初期化されています。
ただし、低レベルのものに実際に必要でない限り、これはPythonでは一般的ではありません。他の回答が示唆するように、ほとんどの場合、空のリストまたは空のnumpy配列を使用する方がベターです。
a = [obj] * N
は、同じobjが配列の各要素に現れるということです。変更可能なオブジェクトで、1つのアイテムを変更すると、すべてが変更されます。...しかし、整数(またはその他の不変タイプ)を使用するこの例では、違いはありません。または、要素に割り当てるだけでも問題ありません。(私はあまりにも頻繁にそれをやったので、私はそれについて言及します:))