Pythonで配列を宣言するにはどうすればよいですか?
ドキュメントに配列への参照が見つかりません。
__getitem__
なければO(1)ではありません。
Pythonで配列を宣言するにはどうすればよいですか?
ドキュメントに配列への参照が見つかりません。
__getitem__
なければO(1)ではありません。
回答:
variable = []
今、variable
空のリストを参照*。
もちろん、これは宣言ではなく割り当てです。Pythonは動的に型指定されているため、Pythonでは「この変数はリスト以外のものを参照してはなりません」と言うことはできません。
*デフォルトの組み込みPythonタイプは、配列ではなくリストと呼ばれます。これは、オブジェクトの異種のコレクションを保持できる、任意の長さの順序付きコンテナです(それらのタイプは重要ではなく、自由に混合できます)。これを、C タイプに近いタイプを提供するarray
モジュールと混同しないでくださいarray
。内容は同種(すべて同じタイプ)でなければなりませんが、長さは動的です。
variable = ["Hi", "Hello"];
?)
my_2x2_list = [[a, b], [c, d]]
。多次元配列が必要な目的に応じて、を使用することを検討することもできますnumpy
。これは、多次元の均一なボックス化されていない配列の配列型を定義し、該当する場合ははるかに効率的であるため、数値計算に適しています。
これはPythonで驚くほど複雑なトピックです。
配列はクラスで表されますlist
(リファレンスを参照して、ジェネレーターと混合しないでください)。
使用例を確認してください:
# empty array
arr = []
# init with values (can contain mixed types)
arr = [1, "eels"]
# get item by index (can be negative to access end of array)
arr = [1, 2, 3, 4, 5, 6]
arr[0] # 1
arr[-1] # 6
# get length
length = len(arr)
# supports append and insert
arr.append(8)
arr.insert(6, 7)
内部では、Python list
はアイテムへの参照を含む実際の配列のラッパーです。また、基になる配列は、追加のスペースを使用して作成されます。
この結果は次のとおりです。
arr[6653]
と同じですarr[0]
)append
操作は「無料」ですが、追加のスペースがありますinsert
操作は高価ですこの操作の複雑さの素晴らしい表を確認してください。
[1, 2, 3, 4, 5, 6, 7, 8, 9][1:-2]
結果は次のようになります[2, 3, 4, 5, 6, 7]
a == b[:2]
最初の2つの要素場合にtrueを返しBは、配列の値に等しいA
実際に宣言することはありませんが、これはPythonで配列を作成する方法です。
from array import array
intarray = array('i')
詳細については、配列モジュールを参照してください:http : //docs.python.org/library/array.html
配列ではなくリストが必要になりましたが、他の人はすでにそれに答えています。:)
list
。Pythonには、array
C配列と似た特殊な目的のデータ型があり、ほとんど使用されていません。
最初の30個のセルが既に入力されているリストを(意味して)ほしいと思います。そう
f = []
for i in range(30):
f.append(0)
これを使用できる例は、フィボナッチシーケンスです。Project Eulerの問題2を参照
f = [0] * 30
代わりに試してください。
こうやって:
my_array = [1, 'rebecca', 'allard', 15]
計算には、次のようなnumpy配列を使用します。
import numpy as np
a = np.ones((3,2)) # a 2D array with 3 rows, 2 columns, filled with ones
b = np.array([1,2,3]) # a 1D array initialised using a list [1,2,3]
c = np.linspace(2,3,100) # an array with 100 points beteen (and including) 2 and 3
print(a*1.5) # all elements of a times 1.5
print(a.T+b) # b added to the transpose of a
これらのnumpy配列はディスクから保存およびロードでき(圧縮されていても)、大量の要素を含む複雑な計算はCに似ています。
科学的環境でよく使用されます。詳細はこちらをご覧ください。
JohnMachinのコメントが本当の答えになるはずです。他のすべての答えは私の意見では回避策です!そう:
array=[0]*element_count
x=[[0] * 10] * 10
いくつかの貢献により、Pythonの配列はリストで表されることが示唆されました。これは誤りです。Pythonはarray()
標準ライブラリモジュールarray
" array.array()
"にの独立した実装を持っているため、2つを混同するのは誤りです。リストはpythonのリストなので、使用される命名法に注意してください。
list_01 = [4, 6.2, 7-2j, 'flo', 'cro']
list_01
Out[85]: [4, 6.2, (7-2j), 'flo', 'cro']
listとには非常に重要な違いが1つありarray.array()
ます。これらのオブジェクトは両方とも順序付けられたシーケンスですが、array.array()は順序付けられた同種のシーケンスですが、リストは不均一なシーケンスです。
Pythonでは何も宣言していません。あなたはそれを使うだけです。http://diveintopython.netのようなものから始めることをお勧めします。
Lennartの回答に追加するには、次のように配列を作成します。
from array import array
float_array = array("f",values)
ここで、値はタプル、リスト、またはnp.arrayの形式をとることができますが、配列をとることはできません。
values = [1,2,3]
values = (1,2,3)
values = np.array([1,2,3],'f')
# 'i' will work here too, but if array is 'i' then values have to be int
wrong_values = array('f',[1,2,3])
# TypeError: 'array.array' object is not callable
そして出力は同じままです:
print(float_array)
print(float_array[1])
print(isinstance(float_array[1],float))
# array('f', [1.0, 2.0, 3.0])
# 2.0
# True
リストのほとんどのメソッドは配列でも機能し、一般的なものはpop()、extend()、append()です。
回答とコメントから判断すると、配列データ構造はそれほど一般的ではないようです。私はそれが好きですが、リストよりタプルを好むのと同じ方法です。
配列構造には、リストやnp.arrayよりも厳しい規則があります。これにより、特に数値データを扱う場合に、エラーを減らしてデバッグを容易にすることができます。
floatをint配列に挿入/追加しようとすると、TypeErrorがスローされます。
values = [1,2,3]
int_array = array("i",values)
int_array.append(float(1))
# or int_array.extend([float(1)])
# TypeError: integer argument expected, got float
整数(インデックスのリストなど)を意図した値を配列形式で保持すると、np.arrayやリストと同様に配列を反復できるため、「TypeError:リストのインデックスは浮動小数点数ではなく整数でなければならない」のを防ぐことができます。
int_array = array('i',[1,2,3])
data = [11,22,33,44,55]
sample = []
for i in int_array:
sample.append(data[i])
厄介なことに、intをfloat配列に追加すると、intは例外をスローせずにfloatになります。
np.arrayもそのエントリに対して同じデータ型を保持しますが、エラーを出す代わりに、データ型を変更して新しいエントリ(通常はdoubleまたはstr)に合わせます。
import numpy as np
numpy_int_array = np.array([1,2,3],'i')
for i in numpy_int_array:
print(type(i))
# <class 'numpy.int32'>
numpy_int_array_2 = np.append(numpy_int_array,int(1))
# still <class 'numpy.int32'>
numpy_float_array = np.append(numpy_int_array,float(1))
# <class 'numpy.float64'> for all values
numpy_str_array = np.append(numpy_int_array,"1")
# <class 'numpy.str_'> for all values
data = [11,22,33,44,55]
sample = []
for i in numpy_int_array_2:
sample.append(data[i])
# no problem here, but TypeError for the other two
これは、割り当ての間にも当てはまります。データ型が指定されている場合、np.arrayは可能な限り、エントリをそのデータ型に変換します。
int_numpy_array = np.array([1,2,float(3)],'i')
# 3 becomes an int
int_numpy_array_2 = np.array([1,2,3.9],'i')
# 3.9 gets truncated to 3 (same as int(3.9))
invalid_array = np.array([1,2,"string"],'i')
# ValueError: invalid literal for int() with base 10: 'string'
# Same error as int('string')
str_numpy_array = np.array([1,2,3],'str')
print(str_numpy_array)
print([type(i) for i in str_numpy_array])
# ['1' '2' '3']
# <class 'numpy.str_'>
または、本質的に:
data = [1.2,3.4,5.6]
list_1 = np.array(data,'i').tolist()
list_2 = [int(i) for i in data]
print(list_1 == list_2)
# True
一方、配列は単に次のようになります:
invalid_array = array([1,2,3.9],'i')
# TypeError: integer argument expected, got float
このため、タイプ固有のコマンドにnp.arrayを使用することはお勧めできません。ここでは、配列構造が役立ちます。リストは値のデータ型を保持します。
そして、私がかなり厄介なことを見つけた場合、データ型はarray()の最初の引数として指定されますが、(通常)np.array()の2番目の引数として指定されます。:|
Cとの関係はここで参照されています: Pythonリストと配列-いつ使用するのですか?
探索を楽しんでください!
注:配列の型付きで厳密な性質は、PythonではなくCに傾いています。設計上、Pythonの関数には型固有の制約が多くありません。その不人気はまた、共同作業において肯定的なフィードバックを生み出し、それを置き換えるには、追加の[int(x)for x in file]がほとんど含まれます。したがって、配列の存在を無視することは完全に実行可能で合理的です。それはほとんどの場合私たちのほとんどを妨げるべきではありません。:D
文字列の配列があり、Trueに開始される同じ長さのブール値の配列が必要でした。これは私がやったことです
strs = ["Hi","Bye"]
bools = [ True for s in strs ]
int count[26]={0};
おそらくもっと良い方法がありますがbools
、上からのこのバリアントは機能しましたが、 count=[0 for ii in range(26)]
後でそれを変更して、count=[0]*26
望ましいと思われます。