Как объявить массив в Python?

Как объявить массив в Python?

Я не могу найти ссылки на массивы в документации.

Ответ 1

variable = []

Теперь variable ссылается на пустой список *.

Конечно, это назначение, а не декларация. В Python нет возможности сказать, что "эта переменная никогда не должна ссылаться ни на что иное, кроме списка", поскольку Python динамически типизируется.


* По умолчанию встроенный тип Python называется списком, а не массивом. Это упорядоченный контейнер произвольной длины, который может содержать гетерогенную коллекцию объектов (их типы не имеют значения и могут свободно смешиваться). Это не следует путать с модулем array, который предлагает тип ближе к типу C array; содержимое должно быть однородным (все одинакового типа), но длина остается динамической.

Ответ 2

Фактически вы не объявляете вещи, но именно так вы создаете массив в Python:

from array import array
intarray = array('i')

Для получения дополнительной информации см. модуль массива: http://docs.python.org/library/array.html

Теперь вам не нужен массив, но список, но другие уже ответили на это.:)

Ответ 3

Я думаю, что вы (означало) хотите список с первыми 30 ячейками, которые уже заполнены. Так

   f = []

   for i in range(30):
       f.append(0)

Пример того, где это можно использовать, - это последовательность Фибоначчи. См. Проблему 2 в Project Euler

Ответ 4

Это удивительно сложная тема в Python.

Практический ответ

Массивы представлены классом list (см. ссылка и не смешивайте их с generators).

Ознакомьтесь с примерами использования:

# 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 операция стоит дорого

Проверьте удивительную сложность таблицы операций.

Кроме того, см. это изображение, где я попытался показать наиболее важные различия между массивом, массивом ссылок и связанным списком: массивы, массивы везде

Ответ 5

Вот как это сделать:

my_array = [1, 'rebecca', 'allard', 15]

Ответ 6

Вы не заявляете ничего в Python. Вы просто используете его. Я рекомендую вам начать с чего-то вроде http://diveintopython.net.

Ответ 7

для расчетов используйте 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-подобны быстро. Многое используется в научной среде. См. здесь для более...

Ответ 8

Обычно я просто a = [1,2,3], который на самом деле является list, но для arrays рассмотрит это формальное определение

Ответ 9

Несколько предложений показали, что массивы в python представлены списками. Возможно, теоретически/под капотом, который является правильным, однако главное различие между ними состоит в том, что списки принимают смешанные типы данных и смешанные числовые типы, с другой стороны, для массива требуется тип-код, ограничивающий все элементы определенным типом:

list_01 = [4, 6.2, 7-2j, 'flo', 'cro']

list_01
Out[85]: [4, 6.2, (7-2j), 'flo', 'cro']

Это невозможно с помощью array().

Ответ 10

Чтобы добавить к ответу 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

Сохранение значений, которые должны быть целыми (например, список индексов) в массиве Таким образом, форма может препятствовать тому, чтобы индексы TypeError: list должны были быть целыми, а не float, поскольку массивы можно перебирать, подобно 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 для команд, специфичных для типа. Здесь важна структура массива. list сохраняет тип данных значений.

И для чего-то я нахожу довольно надоедливым: тип данных указан как первый аргумент в array(), но (обычно) второй в np.array().: |

Отнесение к C называется здесь: Список Python против массива - когда использовать?

Получайте удовольствие от изучения!

Примечание: типизированный и довольно строгий характер массива опирается скорее на C, чем на Python, и по дизайну Python не имеет в своих функциях ограничений по конкретному типу. Его непопулярность также создает положительную обратную связь в совместной работе, и ее замена в основном связана с дополнительным [int (x) для x в файле]. Поэтому вполне жизнеспособно и разумно игнорировать существование массива. Это никоим образом не должно мешать большинству из нас.: D

Ответ 11

Вслед за Леннартом также numpy, который реализует однородные многомерные массивы.

Ответ 12

Как насчет этого...

>>> a = range(12)
>>> a
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
>>> a[7]
6

Ответ 13

Python называет их lists. Вы можете написать литерал списка с квадратными скобками и запятыми:

>>> [6,28,496,8128]
[6, 28, 496, 8128]

Ответ 14

У меня был массив строк, и мне понадобился массив с одинаковой длиной булевых объектов, инициализированный True. Это то, что я сделал

strs = ["Hi","Bye"] 
bools = [ True for s in strs ]

Ответ 15

комментарий JohnMachin должен быть реальным ответом. Все остальные ответы - это всего лишь обходные пути, на мой взгляд! Итак:

array=[0]*element_count

Ответ 16

Вы можете создавать списки и преобразовывать их в массивы или создавать массив с помощью 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, используя функцию reshape, которая принимает входные данные в качестве размеров матрицы.

mat = a.reshape(2, 2)