Bagaimana cara mendeklarasikan array dalam Python?
Saya dapat't menemukan referensi ke array dalam dokumentasi.
variable = []
Sekarang variabel
mengacu pada daftar kosong*.
Tentu saja ini adalah sebuah tugas, bukan pernyataan. Ada's tidak ada cara untuk mengatakan di Python "variabel ini harus merujuk ke sesuatu yang lain dari daftar", karena Python adalah dynamically typed.
default built-in Python jenis ini disebut klik disini*, bukan array. Itu adalah memerintahkan kontainer panjang sewenang-wenang yang bisa menyimpan beragam koleksi benda-benda (jenis mereka tidak peduli dan dapat dicampur secara bebas). Ini tidak harus bingung dengan array
modul, yang menawarkan tipe lebih dekat ke C array
jenis; isi harus homogen (semua tipe sama), tapi panjang masih dinamis.
Ini adalah mengherankan topik yang kompleks di Python.
Array yang diwakili oleh kelas daftar
(lihat referensi dan tidak mencampur mereka dengan generator).
Check out contoh penggunaan:
# 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)
Di bawah tenda Python's daftar
adalah wrapper untuk real array yang berisi referensi untuk item. Juga, mendasari array dibuat dengan beberapa ruang ekstra.
Konsekuensi dari hal ini adalah:
arr[6653]
adalah sama dengan arr[0]
)menambahkan
operasi 'gratis' sementara beberapa ruang ekstrainsert
operasi yang mahalCheck this mengagumkan meja operasi kompleksitas.
Juga, silakan lihat gambar ini, di mana saya've mencoba untuk menunjukkan yang paling penting perbedaan antara array, array referensi dan linked list:
Anda don't benar-benar menyatakan hal-hal, tapi ini adalah cara anda membuat array di Python:
from array import array
intarray = array('i')
Untuk info lebih lanjut lihat array modul: http://docs.python.org/library/array.html
Sekarang mungkin anda don't ingin array, tapi daftar, tetapi yang lain telah menjawab bahwa sudah. :)
Saya pikir anda (berarti)ingin daftar dengan 30 sel-sel yang sudah diisi. Jadi
f = []
for i in range(30):
f.append(0)
Contoh tempat ini bisa digunakan di urutan Fibonacci. Melihat masalah 2 di Project Euler
Beberapa kontribusi menyarankan bahwa array dalam python yang diwakili oleh daftar. Ini adalah salah. Python memiliki independen pelaksanaan array()
di perpustakaan standar modul array
"array.array()
" karena itu adalah salah untuk membingungkan dua. Daftar list di python jadi berhati-hati dengan nomenklatur yang digunakan.
list_01 = [4, 6.2, 7-2j, 'flo', 'cro']
list_01
Out[85]: [4, 6.2, (7-2j), 'flo', 'cro']
Ada satu perbedaan yang sangat penting antara daftar dan array.array()
. Sementara kedua benda tersebut yang diperintahkan urutan array.array() adalah memerintahkan homogen sedangkan urutan daftar adalah non-homogen urutan.
Untuk perhitungan, gunakan numpy array seperti ini:
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
ini numpy array dapat disimpan dan diambil dari disk (bahkan terkompresi) dan perhitungan-perhitungan yang kompleks dengan sejumlah besar unsur-unsur C-seperti cepat.
Banyak digunakan dalam karya ilmiah lingkungan. Lihat di sini untuk lebih lanjut.
Saya biasanya hanya melakukan a = [1,2,3]
yang sebenarnya adalah daftar
, tapi untuk array
lihat ini resmi definisi
Untuk menambah Lennart's jawaban, array dapat dibuat seperti ini:
from array import array
float_array = array("f",values)
di mana nilai ** dapat mengambil bentuk sebuah tuple, daftar, atau np.array, tapi tidak 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
dan output masih akan sama:
print(float_array)
print(float_array[1])
print(isinstance(float_array[1],float))
# array('f', [1.0, 2.0, 3.0])
# 2.0
# True
Sebagian besar metode untuk bekerja dengan array juga, umum orang-orang yang pop(), memperpanjang(), dan append().
Dilihat dari jawaban dan komentar, tampak bahwa array struktur data isn't yang populer. Aku suka, sama jalan sebagai salah satu mungkin lebih memilih tupel atas daftar.
Array struktur memiliki aturan ketat dari daftar atau np.array, dan hal ini dapat mengurangi kesalahan dan membuat debugging lebih mudah, terutama ketika bekerja dengan numerik data.
Upaya untuk menyisipkan/menambahkan float ke int array akan membuang 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
Menjaga nilai-nilai yang dimaksudkan untuk menjadi bilangan bulat (misalnya daftar indeks) dalam array bentuk mungkin karena itu mencegah "TypeError: daftar indeks harus bilangan bulat, tidak float", karena array dapat melakukan iterasi atas, mirip dengan np.array dan mencantumkan:
int_array = array('i',[1,2,3])
data = [11,22,33,44,55]
sample = []
for i in int_array:
sample.append(data[i])
Mengganggu, menambahkan int untuk mengapung array akan menyebabkan int untuk menjadi mengambang, tanpa membuang pengecualian.
np.array menyimpan tipe data yang sama untuk entri-nya juga, tapi bukannya memberikan kesalahan itu akan mengubah tipe data untuk menyesuaikan entri baru (biasanya untuk dua atau 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
Hal ini berlaku selama tugas juga. Jika tipe data tertentu, misalnya.array akan, sedapat mungkin, mengubah entri ke tipe data:
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_'>
atau, pada dasarnya:
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
sementara hotel yang hanya akan memberikan:
invalid_array = array([1,2,3.9],'i')
# TypeError: integer argument expected, got float
Karena ini, itu adalah bukan ide yang baik untuk menggunakan np.array untuk tipe-perintah tertentu. Array struktur ini berguna di sini. daftar mempertahankan tipe data dari nilai-nilai.
Dan untuk sesuatu yang saya temukan agak sial: tipe data yang ditetapkan sebagai argumen pertama dalam array(), tapi (biasanya) kedua di np.array(). :|
Kaitannya dengan C yang dimaksud di sini: https://stackoverflow.com/questions/176011/python-list-vs-array-when-to-use
Bersenang-senang menjelajahi!
Catatan: diketik dan agak ketat sifat array bersandar lebih ke arah C daripada Python, dan dengan desain Python tidak memiliki banyak tipe-spesifik kendala dalam fungsinya. Ketidakpopuleran tersebut juga menciptakan umpan balik positif pada kerja kolaboratif, dan mengganti sebagian besar melibatkan tambahan [int(x) untuk x dalam file]. Oleh karena itu sepenuhnya layak dan wajar untuk mengabaikan keberadaan array. Seharusnya't menghalangi sebagian besar dari kita dengan cara apapun. :D
Anda dapat membuat daftar dan mengkonversi mereka ke dalam array atau anda dapat membuat array menggunakan modul numpy. Berikut ini adalah beberapa contoh untuk menggambarkan hal yang sama. Numpy juga membuatnya lebih mudah untuk bekerja dengan array multi-dimensi.
import numpy as np
a = np.array([1, 2, 3, 4])
#For custom inputs
a = np.array([int(x) for x in input().split()])
Anda juga dapat membentuk array ini menjadi 2X2 matrix menggunakan membentuk fungsi yang mengambil di masukan sebagai dimensi dari matriks.
mat = a.reshape(2, 2)