Ответ 1
Почему не просто:
a = a + [0]*(maxLen - len(a))
Я хочу получить список фиксированной длины из другого списка, например:
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
Что я могу сделать?
Почему не просто:
a = a + [0]*(maxLen - len(a))
Используйте повтор itertools.
>>> from itertools import repeat
>>> a + list(repeat(0, 6))
['a', 'b', 'c', 0, 0, 0, 0, 0, 0]
Почему не просто
c = (a + b)[:len(b)]
Чтобы быть более явным, это решение заменяет первые элементы 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]
a+[0]*(len(b) - len(a))
['a', 'b', 'c', 0, 0, 0, 0, 0, 0, 0]
Если вы хотите заполнить изменяемыми значениями, например, с помощью 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'}
!
Не можете ли вы просто сделать:
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]
LIST_LENGTH = 10
a = ['a','b','c']
while len(a) < LIST_LENGTH:
a.append(0)
Еще одно решение:
a = ['a', 'b', 'c']
maxlen = 10
result = [(0 if i+1 > len(a) else a[i]) for i in range(maxlen)]
Мне нравятся некоторые другие решения.
a = ['a','b','c']
c=len(a)
mylist = [0]*c
print(mylist)
[0, 0, 0]