Python создает список, содержащий кортежи [duplicate]

Вы можете сделать это, не используя box-sizing и не очистить решения, такие как width ~ = 99% .

Демонстрация на jsFiddle : enter image description here [!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;  / * отрицательный край = ширина границы + горизонтальное дополнение * /}  

1
задан Bach 24 March 2014 в 12:27
поделиться

3 ответа

Похоже, ваш код должен сказать 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.

2
ответ дан lvc 16 August 2018 в 10:12
поделиться
  • 1
    он не будет работать, потому что вы не можете ответить answer.extend () – PyNEwbie 24 March 2014 в 00:43
  • 2
    @PyNEwbie ах, да, я пропустил это. Я обновил свой ответ. – lvc 24 March 2014 в 00:46
  • 3
    Извините, я был неправ, что нужно, добавление не распространяется, и ваше решение все еще не существует, так как у вас есть список кортежей – PyNEwbie 24 March 2014 в 00:50
  • 4
    Ах, я не был знаком с функцией расширения. Я понимаю ошибку теперь спасибо! – user3225528 24 March 2014 в 00:50

Чтобы получить список списков, вы можете использовать встроенную функцию 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]]
4
ответ дан Christian 16 August 2018 в 10:12
поделиться

Предполагая, что вы делаете это для класса и не изучаете все трюки, которые делают 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']]
1
ответ дан PyNEwbie 16 August 2018 в 10:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: