Запрос о списке python [дубликат]

Использование регулярного цикла for - самый простой способ печати массива, на мой взгляд. Здесь у вас есть пример кода, основанный на вашем intArray

for (int i = 0; i < intArray.length; i++) {
   System.out.print(intArray[i] + ", ");
}

. Он дает результат как ваш 1, 2, 3, 4, 5

16
задан Flexo1515 27 July 2013 в 03:21
поделиться

6 ответов

Переменные Python содержат ссылки на значения . Таким образом, когда вы определяете список palin, вы передаете значение, на которое ссылается polly, а не сама переменная.

Вы должны представлять значения как воздушные шары, при этом переменными являются потоки, привязанные к этим воздушным шарам. "alive" - это воздушный шар, polly - это просто поток этого воздушного шара, а в списке palin есть другой поток, привязанный к тому же воздушному шару. В python список - это просто серия потоков, все номера которых начинаются с 0.

. Что вы делаете дальше, привяжите строку polly к новому шару "dead", но список все еще держится на старую нить, привязанную к воздушному шару "alive".

Вы можете заменить этот поток на "alive", удерживаемый списком, переназначив список по индексу для обращения к каждому потоку; в вашем примере это поток 1:

>>> palin[1] = polly
>>> palin
['parrot', 'dead']

Здесь я просто привязал поток palin[1] к тому же, к чему polly привязан, что бы это ни было.

Обратите внимание, что любая коллекция в python, такая как dict, set, tuple и т. Д. - это просто коллекции потоков. Некоторые из них могут обмениваться потоками для разных потоков, таких как списки и dicts, и это то, что делает что-то в python «изменчивым».

С другой стороны, строки not изменяемы. Как только вы определяете строку типа "dead" или "alive", это один шар. Вы можете связать его потоком (переменная, список или что-то еще), но вы не можете заменить буквы внутри него. Вы можете связать этот поток только с полной новой строкой.

Большинство вещей в python могут действовать как воздушные шары. Цели, строки, списки, функции, экземпляры, классы, все могут быть привязаны к переменной или привязаны к контейнеру.

Возможно, вы захотите прочитать трактат Ned Batchelder о именах Python .

44
ответ дан Martijn Pieters 27 August 2018 в 16:26
поделиться

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

Что вы можете сделать, это сделать polly изменчивым объектом вместо строки и изменить его значение вместо того, чтобы переписывать имя. Простой пример:

>>> polly = ['alive']
>>> items = ['parrot', polly]
>>> items
['parrot', ['alive']]
>>> polly[0] = 'dead'
>>> items
['parrot', ['dead']]
0
ответ дан BrenBarn 27 August 2018 в 16:26
поделиться

Перед вторым заявлением печати сохраните новые значения в palin:

palin = ["parrot", polly]
4
ответ дан girasquid 27 August 2018 в 16:26
поделиться

Список будет содержать только значения, а не ссылки на переменные, как вам хотелось бы. Тем не менее, вы можете сохранить лямбда в списке, а лямбда найти значение вашей переменной.

>>> a = 'a'
>>> list = ['a',lambda: a]
>>> list[1]
<function <lambda> at 0x7feff71dc500>
>>> list[1]()
'a'
>>> a = 'b'
>>> list[1]()
'b'
0
ответ дан Jonatan 27 August 2018 в 16:26
поделиться

Когда вы помещаете строку в список, список содержит копию строки. Неважно, была ли строка первоначально переменной, литеральное значение, результат вызова функции или что-то еще; к тому времени, когда список увидит его, это всего лишь строковое значение. Изменение того, что сгенерировало строку позже, никогда не повлияет на список.

Если вы хотите сохранить ссылку на значение, которое будет замечено при изменении этого значения, обычным механизмом является использование списка, содержащего «ссылки», стоимость. Применяя это к вашему примеру, вы завершаетесь вложенным списком:

polly = ["alive"]
palin = ["parrot", polly]
print(palin)
polly[0] = "dead"
print(palin)
3
ответ дан Mark Reed 27 August 2018 в 16:26
поделиться

Другие ответы объяснили, что происходит.

Это одна из (нескольких) проблем, которые мотивируют использование объектов. Например, можно было бы это сделать:

class Animal:
    def __init__(self, aniType, name):
        self.aniType = aniType
        self.name = name
        self.isAlive = True

    def kill(self):
        self.isAlive = False

    def getName(self):
        return self.name

    def getType(self):
        return self.aniType

    def isLiving(self):
        return self.isAlive


polly = Animal("parrot", "polly")

print(polly.getName()+' the '+polly.getType()+' is alive?')
print(polly.isLiving())

polly.kill()

print(polly.getName()+' the '+polly.getType()+' is alive?')
print(polly.isLiving())

Сначала для простой задачи это может выглядеть как много кода, но объекты часто являются способами для таких вещей, потому что они помогают поддерживать все организовано.

Вот результат этой программы:

polly the parrot is alive?
True
polly the parrot is alive?
False
0
ответ дан Matthew Adams 27 August 2018 в 16:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: