Подтвердить что ты не робот

Как заполнить список с помощью 0 с помощью python

Я хочу получить список фиксированной длины из другого списка, например:

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

И я хочу получить такой список: ['a','b','c',0,0,0,0,0,0,0]. Другими словами, если len(a) < len(b), я хочу заполнить список a значениями из списка b до длины списка b, что несколько похоже на то, что str.ljust делает.

Это мой код:

a=['a','b','c']
b = [0 for i in range(5)]
b = [a[i] for i in b if a[i] else i]

print a

Но он показывает ошибку:

  File "c.py", line 7
    b = [a[i] for i in b if a[i] else i]
                                    ^
SyntaxError: invalid syntax

Что я могу сделать?

4b9b3361

Ответ 1

Почему не просто:

a = a + [0]*(maxLen - len(a))

Ответ 2

Используйте повтор itertools.

>>> from itertools import repeat
>>> a + list(repeat(0, 6))
['a', 'b', 'c', 0, 0, 0, 0, 0, 0]

Ответ 3

Почему не просто

c = (a + b)[:len(b)]

Ответ 4

Чтобы быть более явным, это решение заменяет первые элементы b всеми элементами a независимо от значений в a или b:

a + b[len(a):]

Это также будет работать с:

>>> a = ['a', ['b'], None, False]
>>> b = [0, 1, 2, 3, 4, 5]
>>> a + b[len(a):]
['a', ['b'], None, False, 4, 5] 

Если вы не хотите, чтобы результат был длиннее b:

>>> a = ['a', ['b'], None, False]
>>> b = [0, 1, 2]
>>> (a + b[len(a):])[:len(b)]
['a', ['b'], None]

Ответ 5

a+[0]*(len(b) - len(a))

['a', 'b', 'c', 0, 0, 0, 0, 0, 0, 0]

Ответ 6

Если вы хотите заполнить изменяемыми значениями, например, с помощью dict s:

map(lambda x: {}, [None] * n)

Где n - количество элементов в массиве.

>>> map(lambda x: {}, [None] * 14)
[{}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}]
>>> l = map(lambda x: {}, [None] * 14)
>>> l[0]
{}
>>> l[0]['bar'] = 'foo'
>>> l
[{'bar': 'foo'}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}]

Заполнение без lambda приведет к тому, что каждый элемент будет {'bar': 'foo'}!

Ответ 7

Не можете ли вы просто сделать:

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

c = a + b #= ['a','b','c',0,0,0,0,0,0,0]

Ответ 8

LIST_LENGTH = 10
a = ['a','b','c']

while len(a) < LIST_LENGTH:
    a.append(0)

Ответ 9

Еще одно решение:

a = ['a', 'b', 'c']
maxlen = 10
result = [(0 if i+1 > len(a) else a[i])  for i in range(maxlen)]

Мне нравятся некоторые другие решения.

Ответ 10

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

    c=len(a)
    mylist = [0]*c

    print(mylist)

[0, 0, 0]