Использование ошибки ломтиков:Python - Добавление 3 списков, по строкам
list_one = cards_18[0::3] # from index 0 to end, add 3 list_two = cards_18[1::3] list_three = cards_18[2::3]
Использование ошибки ломтиков:Python - Добавление 3 списков, по строкам
list_one = cards_18[0::3] # from index 0 to end, add 3 list_two = cards_18[1::3] list_three = cards_18[2::3]
можно упростить с помощью ломтиков:
list_one = cards_18[:2]
list_two = cards_18[2:4]
list_three = cards_18[4:6]
ли делать следующее, что вы хотите?
list_one = [card for (i, card) in enumerate(cards_18) if i % 3 == 0]
list_two = [card for (i, card) in enumerate(cards_18) if i % 3 == 1]
list_three = [card for (i, card) in enumerate(cards_18) if i % 3 == 2]
При этом используется тот факт, что результат «по модулю 3» операция цикла между 0, 1 и 2 при нанесении на последовательные целые числа.
enumerate
будет генерировать индексы карт в списке вместе с самими картами.
List comprehensions Включить этот вид коротких обозначений.
Простой способ:
list_one = cards_18[0::3]
list_two = cards_18[1::3]
list_three = cards_18[2::3]
В [0::3]
, то 0
средства начинается с первого элемента, то отсутствующее значение в середине означает идти до самого конца, и 3
в конце означает использовать каждый третий элемент.
Edit: немного аккуратнее, но та же самая основная идея:
splits = 3
lists = [cards_18[i::splits] for i in range(splits)]
list_one, list_two, list_three = lists
Третья строка не нужна, если вы можете просто работать с lists
напрямую (что, вероятно, в конечном итоге дает вам чистый код). Первая строка не нужна, потому что вы можете просто подставить номер 3 непосредственно в два места на следующей строке, в которой она используется, но с использованием переменной яснее IMO.
Я думаю, что list_one [0,3,6,9,12,15], list_two is [1,4,7,10,13,16], list_three [2,5,8,11,14, 17].
Если вам не нужно делать это построчно подряд:
list_one = cards_18[0::3] # from index 0 to end, add 3
list_two = cards_18[1::3]
list_three = cards_18[2::3]
Если я интерпретирую ваш вопрос правильно, вы хотите иметь дело карты между тремя списками.
Простой цикл через cards_18
с использованием оператора модуля (%
) для циклического переключения между списками.
Пример:
for i, card in enumerate(cards_18):
if i%3 == 0:
list_one.append(card)
if i%3 == 1:
list_two.append(card)
if i%3 == 2:
list_three.append(card)
Зачем перечислять? –
@timburnt перечисление - это простой способ доступа к индексу элемента в цикле for, вы можете в качестве альтернативы использовать 'cards_18.index (card)' для получения текущего индекса. –
Я предполагаю, что вы хотите иметь дело каждую третью карту для каждого столбца, вы могли бы сделать
for i in range(0,18,3):
list_one.append(cards_18[i])
list_two.append(cards_18[i+1])
list_three.append(cards_18[i+2])
Диапазон будет состоять из целых чисел от 0 до 18 лет (за исключением 18) с шагом 3, поэтому 0, 3, 6, ... 15
Вы также можете использовать ломтики:
list_one = cards_18[0::3]
list_two = cards_18[1::3]
list_three = cards_18[2::3]
Можете ли вы привести пример того, что такое 'cards_18'? Обратите внимание, что [Code Review] (http://codereview.stackexchange.com/) выполняется для такого рода вопросов. –
В первую очередь вы не должны иметь карточки в отдельных переменных. Используйте один список. –
@ DanielRoseman Мне кажется, что карты находятся в одном списке, 'cards_18'. Или я неправильно понял ваш комментарий? – bli