Форум сайта python.su
0
При создании списка вот таким deck =
[[''] * 9]*4
suits = [' of hearts', ' of spades', ' of diamonds', ' of clubs'] card_val = ['6', '7', '8', '9', '10', 'Jack', 'Queen', 'King', 'Ace'] deck = [[''] * 9]*4 deck_1 = [['','','','','','','','','',], ['','','','','','','','','',], ['','','','','','','','','',], ['','','','','','','','','',]] for x in range(len(deck)): for y in range(len(card_val)): deck[x][y] = card_val[y] + suits[x] print (deck) print ('--------------------') print (deck_1)
Отредактировано FishHook (Июль 12, 2022 10:30:20)
Офлайн
568
Andruid
список - изменяемый объект (погуглите “питон изменяемые и неизменяемые”), это значит, что он всегда передается по ссылке, то есть вот тут
[[''] * 9]*4
Офлайн
0
FishHookПонятно, а как тогда создать кратко вот такую “болванку” для списка? Если мне нужно будет не 4 на 9, а больше, я замучаюсь эти скобки и кавычки рисовать. Можно как то эту запись deck = [ * 9]*4 сделать, чтобы она работала после создания, как 4 разных списка, а не ссылка на один и тот же?
вы создали не список из четырех списков, а список из четырех ссылок на один и тот же список
Офлайн
5
deck = [[] for i in range(4)] for x in range(len(deck)): for y in range(len(card_val)): deck[x].append(card_val[y] + suits[x])
deck_1 = [[], [], [], []]
Отредактировано Palrom (Июль 12, 2022 11:29:32)
Офлайн
568
Andruid
я замучаюсь эти скобки и кавычки рисовать
deck = [[''] * 9 for _ in range(4)]
Офлайн
124
suits = [' of hearts', ' of spades', ' of diamonds', ' of clubs'] card_val = ['6', '7', '8', '9', '10', 'Jack', 'Queen', 'King', 'Ace'] deck = [f"{v}_{s}" for v in card_val for s in suits] print(deck)
['6_ of hearts', '6_ of spades', '6_ of diamonds', '6_ of clubs', '7_ of hearts', '7_ of spades', '7_ of diamonds', '7_ of clubs', '8_ of hearts', '8_ of spades', '8_ of diamonds', '8_ of clubs', '9_ of hearts', '9_ of spades', '9_ of diamonds', '9_ of clubs', '10_ of hearts', '10_ of spades', '10_ of diamonds', '10_ of clubs', 'Jack_ of hearts', 'Jack_ of spades', 'Jack_ of diamonds', 'Jack_ of clubs', 'Queen_ of hearts', 'Queen_ of spades', 'Queen_ of diamonds', 'Queen_ of clubs', 'King_ of hearts', 'King_ of spades', 'King_ of diamonds', 'King_ of clubs', 'Ace_ of hearts', 'Ace_ of spades', 'Ace_ of diamonds', 'Ace_ of clubs']
Офлайн
61
В питоне не нужно создавать массив определенной длины перед тем как его заполнить по аналогии
с Си и другими языками (кроме отдельных случаев и то там будет кортеж скорее всего)
suits = [" of hearts", " of spades", " of diamonds", " of clubs"] card_val = ["6", "7", "8", "9", "10", "Jack", "Queen", "King", "Ace"] deck = [] for cs in suits: deck.append([val+cs for val in card_val]) print(deck)
Офлайн
61
xam1816
Опередил. Только подчеркивание лишнее…
Офлайн
0
Спасибо всем за ответы.
Можно ли сделать сделать методом без предопределения списка (таким как
deck = [f"{v}_{s}" for v in card_val for s in suits]
deck.append([val+cs for val in card_val]))
Отредактировано Andruid (Июль 12, 2022 20:42:33)
Офлайн
61
можно - зачем ваш наш форум?
Офлайн