2017-01-11 2 views
1

Я пытаюсь округлить длину списков вверх до нескольких из трех, используя пустые строки (''). Например:Заполнение списка до кратного числа

['a','b'] >>>['a','b','']

['a','b','c'] >>>['a','b','c']

['a','b','c','d'] >>>['a','b','c','d','','']

как бы я идти об этом без если заявление? Могу ли я использовать modulo для этого?

ответ

7

просто вычислить количество строк, чтобы добавить и выполнить сложение на месте:

l = ['a','b','c','d'] 

l += ['']*((3-len(l))%3) 

print(l) 

результат:

['a', 'b', 'c', 'd', '', ''] 

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

0

насчет:

def fillmultiple(lst): 
    ll = len(lst) #calculate the length of the list 
    toadd = (3-ll)%3 #calculate how much additional elements to add 
    return lst+['']*toadd #return the list with the elements added 

код просто использует вычисления по модулю (%3), чтобы вычислить, сколько длина оторвется от следующего кратного трем.

5

Это самый быстрый и (ИМО) наиболее читаемый способ сделать это:

l = ['a', 'b', 'c', 'd'] 

while len(l) % 3 != 0: 
    l.append('') 

Performance test using timeit

+0

Мне нравится этот ответ, но я чувствую, что краткий ответ, данный «Жан-Франсуа Фабре», заслуживает признания. – lol

+0

очень хорошо, если число не слишком высокое, что здесь. Хорошо. –

0

Вы можете достичь этого путем добавления дополнительных пустых строк.

l=['a','b','b','c'] 

while (3-len(l))%3: l.append('') 

Вот и все!

1
data = [ 
    ['a','b'], 
    ['a','b','c'], 
    ['a','b','c','d'], 
] 

for row in data: 
    result = row + ([''] * (-len(row) % 3)) 
    print(row, '>>>', result) 
Смежные вопросы