2016-10-28 5 views
0

Использование ошибки ломтиков: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]

+2

Можете ли вы привести пример того, что такое 'cards_18'? Обратите внимание, что [Code Review] (http://codereview.stackexchange.com/) выполняется для такого рода вопросов. –

+0

В первую очередь вы не должны иметь карточки в отдельных переменных. Используйте один список. –

+0

@ DanielRoseman Мне кажется, что карты находятся в одном списке, 'cards_18'. Или я неправильно понял ваш комментарий? – bli

ответ

0

можно упростить с помощью ломтиков:

list_one = cards_18[:2] 
list_two = cards_18[2:4] 
list_three = cards_18[4:6] 
0

ли делать следующее, что вы хотите?

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 Включить этот вид коротких обозначений.

1

Простой способ:

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.

1

Я думаю, что 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] 
1

Если я интерпретирую ваш вопрос правильно, вы хотите иметь дело карты между тремя списками.

Простой цикл через 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) 
+0

Зачем перечислять? –

+0

@timburnt перечисление - это простой способ доступа к индексу элемента в цикле for, вы можете в качестве альтернативы использовать 'cards_18.index (card)' для получения текущего индекса. –

1

Я предполагаю, что вы хотите иметь дело каждую третью карту для каждого столбца, вы могли бы сделать

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] 
Смежные вопросы