Задать вопрос
@Soul1

Как в Python присвоить нескольким переменным одинаковое значение?

Подскажите, как в Pyton можно кратко присвоить нескольким переменным одинаковое значение.
Мне нужно, чтобы было a, b, c = [], но такая запись не работает :((

Сколько ни гуглил, нашёл лишь 4 варианта:
1) a = b = c = []
2) a, b, c = [], [], []
3) a, b, c = [[]] * 3
4)
a = []
b = []
c = []
В первом варианте проблема в том, что переменные будут ссылаться друг на друга.
Во втором варианте проблема в длине записи, если элементов много, то замучаешься перечислять.
Четвёртый вариант аналогичен второму, только запись не в строчку, а в столбик.
Думал спасение в третьем варианте, но он подходит разве что для чисел, там нет проблем, если стартовое значение переменной будет храниться в списке. А как быть, если нужен пустой список ? Тогда запись a, b, c = [[]] * 3 не подойдёт, так как хоть для каждой переменной и создастся отдельный пустой список, но из-за того, что все они будут внутри ещё одного списка алгоритм не будет правильно работать.
Есть какой-нибудь вариант как в одну строку нескольким переменным присвоить значение (в частности интересует создание пустого списка для каждой переменной) ?

P.S.: наверное, в случае с созданием пустого списка правильнее говорить не "переменная", а "имя" по отношению к a, b, c ? Ну, суть вопроса от этого не меняется ) В названиях пока не силён.
  • Вопрос задан
  • 13807 просмотров
Подписаться 1 Простой 1 комментарий
Решения вопроса 1
sswwssww
@sswwssww
class MyList:
    def __new__(cls, vars_count, *args):
        for _ in range(vars_count):
            yield list(*args)

a, b, c = MyList(vars_count=3)

или так:
a, b, c = (list() for _ in range(3))
Но лучше хорошо подумайте над тем что вы не так делаете(а вы 100% что-то не так делаете).
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
trapwalker
@trapwalker Куратор тега Python
Программист, энтузиаст
огда запись a, b, c = [[]] * 3 не подойдёт, так как хоть для каждой переменной и создастся отдельный пустой список, но из-за того, что все они будут внутри ещё одного списка алгоритм не будет правильно работать.

Не отдельный, а тот е самый. И всё будет правильно работать, разве что все переменные получат одини тот же пустой список.
Однако, если вам нужен такой грязный код и вы при этом экономите на длине строки, значит что-то вы делаете неправильно.
locals().update({k:[] for k in 'abcd'})
Такой код только запутывает, а огромное число одинаковых переменных говорит, что вам их лучше положить в словарь или матрицу.
Ответ написан
@qid00000000
Мало что знаю, но информацию найду в гугле
Используй кортежи:

a,b,c = (3,) * 3
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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