Як я можу оголосити масив у Python ?
Я не можу знайти жодної посилання на масиви в документації.
__getitem__
не буде O (1).
Як я можу оголосити масив у Python ?
Я не можу знайти жодної посилання на масиви в документації.
__getitem__
не буде O (1).
Відповіді:
variable = []
Тепер variable
відноситься до порожнього списку * .
Звичайно, це завдання, а не декларація. Немає способу сказати в Python "ця змінна ніколи не повинна посилатися ні на що, крім списку", оскільки Python динамічно набирається.
* Вбудований тип Python за замовчуванням називається списком , а не масивом. Це впорядкований контейнер довільної довжини, який може вмістити гетерогенну колекцію предметів (їх типи не мають значення і їх можна вільно змішувати). Це не слід плутати з 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's 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]
повертає True, якщо перші два елементи b дорівнюють значенням масиву a
Ви фактично не декларуєте речі, але саме так ви створюєте масив у Python:
from array import array
intarray = array('i')
Для отримання додаткової інформації див модуль масиву: http://docs.python.org/library/array.html
Тепер можливо, ви не хочете масив, а список, але інші вже відповіли на це. :)
list
. У Python є тип даних спеціального призначення, який називається an, array
який більше схожий на масив C і мало використовується.
Я думаю, ти (мав на увазі) хочеш список із першими 30 клітинками вже заповнений. Тому
f = []
for i in range(30):
f.append(0)
Приклад того, де це можна було б використати, є послідовністю Фібоначчі. Дивіться проблему 2 в Project Euler
f = [0] * 30
замість цього.
Ось як:
my_array = [1, 'rebecca', 'allard', 15]
Для обчислень використовуйте масивні масиви на зразок цього:
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
ці нумерові масиви можна зберігати та завантажувати з диска (навіть стискати), а складні обчислення з великою кількістю елементів швидко схожі на С.
Багато використовується в наукових середовищах. Дивіться тут докладніше.
Коментар ДжонМахіна повинен бути справжньою відповіддю. Всі інші відповіді, на мою думку, просто обхідні шляхи! Тому:
array=[0]*element_count
x=[[0] * 10] * 10
Кілька внесків пропонують, що масиви в python представлені списками. Це неправильно. Python має незалежну реалізацію array()
у стандартному array
" array.array()
" модулі бібліотеки, отже, невірно їх переплутати. Списки - це списки в python, тому будьте обережні з використаною номенклатурою.
list_01 = [4, 6.2, 7-2j, 'flo', 'cro']
list_01
Out[85]: [4, 6.2, (7-2j), 'flo', 'cro']
Існує одна дуже важлива різниця між списком та array.array()
. У той час як обидва ці об'єкти є упорядкованими послідовностями, array.array () є упорядкованими однорідними послідовностями, тоді як список є неоднорідною послідовністю.
Ви нічого не заявляєте в Python. Ви просто використовуєте його. Я рекомендую почати з чогось на зразок http://diveintopython.net .
Я зазвичай просто займаюся тим, a = [1,2,3]
що є насправді, list
але для того, щоб arrays
подивитися на це формальне визначення
Щоб додати відповідь Леннарта, масив може бути створений так:
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 (), extension () та 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
Зберігання значень, що мають на увазі цілі числа (наприклад, список індексів) у формі масиву, може запобігти "TypeError: індекси списку повинні бути цілими числами, а не плавати", оскільки масиви можуть бути ітераційними, подібно до np.array та списків:
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 зберігає той самий тип даних для своїх записів, але замість помилки він змінить тип даних, щоб відповідати новим записам (як правило, подвійним або 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 для команд, характерних для типу. Тут корисна структура масиву. Список зберігає тип даних значень.
І для чогось мені здається досить невдалим: тип даних задається як перший аргумент у масиві (), але (як правило) другий у np.array (). : |
Відносини до C згадуються тут: Список Python vs. Array - коли використовувати?
Приємно досліджуючи!
Примітка: Набраний і досить суворий характер масиву більше схиляється до C, а не до Python, і за дизайном Python не має багатьох специфічних обмежень у своїх функціях. Його непопулярність також створює позитивний відгук у спільній роботі, а його заміна в основному передбачає додатковий [int (x) для x у файлі]. Тому цілком життєздатним і розумним є ігнорування існування масиву. Це не повинно жодним чином перешкоджати більшості з нас. : D
Python називає їх списками . Ви можете написати список буквально з квадратними дужками та комами:
>>> [6,28,496,8128]
[6, 28, 496, 8128]
У мене був масив рядків і мені потрібен масив однакової довжини булевих ініційованих до 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
що здається кращим.
Ви можете створювати списки та перетворювати їх у масиви або створювати масив за допомогою модуля numpy. Нижче наведено кілька прикладів для того, щоб проілюструвати те саме. Numpy також полегшує роботу з багатовимірними масивами.
import numpy as np
a = np.array([1, 2, 3, 4])
#For custom inputs
a = np.array([int(x) for x in input().split()])
Ви також можете змінити цей масив у матрицю 2X2, використовуючи функцію переформатування, яка приймає введення як розміри матриці.
mat = a.reshape(2, 2)