Вы можете сделать это, не используя box-sizing
и не очистить решения, такие как width ~ = 99%
.
Демонстрация на jsFiddle : [!d13]
padding
и border
margin
= border-width
+ горизонтальное дополнение
padding
, равный margin
с предыдущего шага HTML-разметка:
& lt; div class = "input_wrap" & GT; & lt; input type = "text" / & gt; & Lt; / дел & GT;
CSS:
div {padding: 6px 10px; / * равно отрицательному значению поля ввода для мимического нормального `div` box-sizing * /} input {width: 100%; / * сила расширения до ширины контейнера * / padding: 5px 10px; border: none; margin: 0 -10px; / * отрицательный край = ширина границы + горизонтальное дополнение * /}
Похоже, ваш код должен сказать answer = []
, и это не вызовет проблем. Но основная проблема заключается в следующем:
answer = answer.extend(temp)
extend
изменяет answer
и возвращает None. Оставьте это как answer.extend(temp)
, и он будет работать. Вероятно, вы также захотите использовать метод append
, а не extend
- добавить в конец answer
один объект один объект (список temp
), в то время как extend
добавляет каждый элемент temp индивидуально, в конечном счете давая сглаженную версию того, что вы после: [1, 'a', 'x', 2, 'b', 'y', 3, 'c', 'z']
.
Но вместо того, чтобы изобретать колесо, это именно то, что встроенный zip
для:
>>> A = [1,2,3]
>>> B = ['a', 'b', 'c']
>>> C = ['x', 'y', 'z']
>>> list(zip(A, B, C))
[(1, 'a', 'x'), (2, 'b', 'y'), (3, 'c', 'z')]
Обратите внимание, что в Python 2, zip
возвращает список кортежей; в Python 3, он возвращает ленивый итератор (т. е. он строит кортежи по мере их запроса, а не предварительно вычисляет их). Если вы хотите поведение Python 2 в Python 3, вы передаете его через list
, как я сделал выше. Если вы хотите поведение Python 3 в Python 2, используйте функцию izip
из itertools.
Чтобы получить список списков, вы можете использовать встроенную функцию zip()
и для понимания списка для преобразования каждого элемента результата из zip()
из a tuple
- list
:
A = [1, 2, 3]
B = [4, 5, 6]
C = [7, 8, 9]
X = [list(e) for e in zip(A, B, C,)]
print X
>>> [[1, 4, 7], [2, 5, 8], [3, 6, 9]]
Предполагая, что вы делаете это для класса и не изучаете все трюки, которые делают Python отличным инструментом, вот что вам нужно. У вас было две проблемы: сначала, если вы хотите продлить, вы делаете это на месте, но ваш желаемый результат показывает, что вы хотите добавить, а не расширять
def merger(A,B,C):
answer = []
for y in range (len(A)):
a=A[y]
b=B[y]
c=C[y]
temp = [a,b,c]
answer.append(temp)
return answer
>>> answer
[[1, 'a', 'x'], [2, 'b', 'y'], [3, 'c', 'z']]