Basicamente, quero um python equivalente a isso em C:
int a[x];
mas em python eu declaro uma matriz como:
a = []
e o problema é que quero atribuir slots aleatórios com valores como:
a[4] = 1
mas não posso fazer isso com python, pois o array está vazio.
python
arrays
dynamic-arrays
user299648
fonte
fonte
a = [obj] * N
é que o mesmo obj aparece em cada elemento do array. Se for um objeto mutável e você modificar um item, todos serão alterados. ... Mas, para este exemplo usando números inteiros (ou qualquer outro tipo imutável), não faz diferença. Ou, se você apenas atribuir a elementos, também não é um problema. (Menciono isso porque tenho feito exatamente isso com muita frequência :))Você não pode fazer exatamente o que deseja em Python (se eu li você corretamente). Você precisa colocar valores para cada elemento da lista (ou, como você o chamou, array).
Mas, tente isto:
Para listas de outros tipos, use algo além de 0.
None
geralmente também é uma boa escolha.fonte
range(N)
já irá produzir uma lista se Python <3.0.xrange(N)
no Python 2.x. Não tenho certeza de como isso está beirando o incorreto, no entanto. Eu prefiroa = range(N)
porque cada elemento começa em um "padrão" sensato. Acho que é uma questão de opinião.Você pode usar numpy:
Exemplo de matriz vazia :
fonte
Apenas declare a lista e acrescente cada elemento. Por ex:
fonte
também você pode estender isso com o método extend da lista.
fonte
Se você (ou outros pesquisadores desta questão) estiverem realmente interessados em criar uma matriz contígua para preencher com inteiros, considere bytearray e memoryivew :
fonte
fonte
Se você realmente quer uma matriz de estilo C
Observe que não há conceito de variável não inicializada em python. Uma variável é um nome que está vinculado a um valor, então esse valor deve ter algo. No exemplo acima, a matriz é inicializada com zeros.
No entanto, isso é incomum em python, a menos que você realmente precise dele para coisas de baixo nível. Na maioria dos casos, é melhor usar uma lista vazia ou array numpy vazio, como outras respostas sugerem.
fonte