Pythonの配列

python-array.png

色々な配列の廻し方

#-*- coding: utf-8 -*-
array = [1, 2, 3]
for a in array:
    print( a)

配列の一部を取り出す

>>> s = "python"
>>> s[2]        # 2番目の要素を取り出す
't'
>>> s[1:4]      # インデックス番号1~4の3文字を取り出す
'yth'
>>> print s[2:] # 2番目から末尾までの文字を取り出す
そん
>>> s[0] = "P"  # 文字列は不変なので、要素への代入は不可
s[0:-1]#最後の一個だけ取り除く

numpyによるarrayがおすすめ

arrayを使うにはnumpyが必要。

import numpy;
a=numpy.zeros((360,200));#360×200 で0で埋めつくされた配列の宣言
fp=open("data.bin","wb");
a.tofile(fp);#ファイルに書き込む
fp.close();

初期化

import numpy
a=numpy.empty((360,200),dtype=numpy.float32);#360×200 でシングルfloat型

dtype データタイプ

Data type Description
bool Boolean (True or False) stored as a byte
int Platform integer (normally either int32 or int64)
int8 Byte (-128 to 127)
int16 Integer (-32768 to 32767)
int32 Integer (-2147483648 to 2147483647)
int64 Integer (9223372036854775808 to 9223372036854775807)
uint8 Unsigned integer (0 to 255)
uint16 Unsigned integer (0 to 65535)
uint32 Unsigned integer (0 to 4294967295)
uint64 Unsigned integer (0 to 18446744073709551615)
float Shorthand for float64.
float16 Half precision float: sign bit, 5 bits exponent, 10 bits mantissa
float32 Single precision float: sign bit, 8 bits exponent, 23 bits mantissa
float64 Double precision float: sign bit, 11 bits exponent, 52 bits mantissa
complex Shorthand for complex128.
complex64 Complex number, represented by two 32-bit floats (real and imaginary components)
complex128 Complex number, represented by two 64-bit floats (real and imaginary components)

リストの場合

Python(list)
初期化 a = [1, 2, 3] a=[]
配列の長さ len(a)
配列が空かどうか len(a) == 0
要素を後ろに足す a.append(x)
要素の挿入 a.insert(0, x)
要素の取り出し a.pop()
要素の削除 a.pop(0)
要素の結合 a.extend(b)
配列のクリア a[:] = []
splice? a.insert(i, x)
要素の全部削除 a.remove(x) *6
指定要素の削除 del(a[i])
要素の数 a.count(x)
要素の検索 x in a
? a.index(x)
先頭の要素 a[0]
最後尾の要素 a[-1]
スライス a[i:i+l]
? a[i:j+1]
配列の確保
Python(list)

その他の初期化方法

#vector vi = vector(10,0);
#みたいに10この要素をすべてを0で初期化するみたいなことがしたい場合は、
 a=[0]*10
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
b = a[0]       # aの0番目の要素「0」を取り出してbに代入
c = []         # 空のリストcを生成
c.append(4)    # cに「4」を追加 (結果、c == [4]になる)
c.append(5)    # cに「5」を追加 (結果、c == [4, 5]になる)
d = a + c      # aとcを連結してdに代入 (結果、d == [0, 1, 2, 3, 4, 5]になる)

 上の例では、最終的に0から5の整数を要素として持つリストdを生成しました。今度はdから偶数の要素だけを取り出したいと思います。このような場合、「リスト内包表記」を使用すると、下記のように書くことができます。
e = [x for x in d if x % 2 == 0]   # (結果、e == [0, 2, 4]になる)

 これは日本語に翻訳すると、「リストdの中の各要素xに対して、x % 2 == 0を満たすxを要素として持つリスト」をeに代入するという意味になります。もう1つリスト内包表記の例を出します。dの各要素を2乗したい場合、下記のように書くことができます。
 f = [x ** 2 for x in d]            # (結果、f == [0, 1, 4, 9, 16, 25]になる)

2次元配列

# リストの初期化
a = [0]*3
# [0, 0, 0]
 
# 2次次元配列の初期化?
a = [[0]*3]*3

と2段階にする。

辞書の配列 C++でいうmap 連想配列

dict = {"yamada":75, "endou":82}

配列の範囲越えエラーを受け取る

try:
                                sumval+=float(_data[(inner_z*_highsize+inner_y)*_highsize+inner_x])/8.0;
                            except IndexError:
                                print("x=%d,y=%d,z=%d"%(x,y,z));

サポートサイト Wikidot.com