цикл Python - PullRequest
       17

цикл Python

2 голосов
/ 19 апреля 2010
 def merge(l1,l2):
 i=0;
 while((l1[i]!=none)||(l2[i]!=none)):

SyntaxError: неверный синтаксис будучи новичком, я не могу понять, что не так с новым кодом.

Ответы [ 2 ]

12 голосов
/ 19 апреля 2010

Заменить || на or, сделать None заглавными (и потерять точку с запятой):

def merge(l1, l2):
  i = 0
  while l1[i] != None or l2[i] != None:
    pass

(Как видите, скобки также были излишними.)

Кроме того, != None можно изменить на is not None:

while l1[i] is not None or l2[i] is not None:

(Спасибо @SilentGhost за указание на это.)

4 голосов
/ 19 апреля 2010

Даже больше Pythonic будет примерно таким (поскольку похоже, что вы перебираете оба списка, пока один не достигнет значения 'None'):

for l1val,l2val in zip(l1,l2):
  if l1val is None or l2val is None:
    break
  ... rest of while loop goes here, using l1val and l2val
      instead of l1[i] and l2[i]

На самом деле, ни один страж не выглядит немного странно. Если это то, что вы добавили в конец, чтобы вы знали, когда находитесь в конце списка, не беспокойтесь - просто используйте собственные функции итерации Python (поскольку циклы автоматически останавливаются в конце списка, по которому они повторяются. *)

for l1val,l2val in zip(l1,l2):
  ... body of while loop goes here, using l1val and l2val
      instead of l1[i] and l2[i]

* - Они на самом деле не останавливаются автоматически - итератор списка вызывает исключение StopIteration, которое перехватывается циклом for как сигнал о прекращении цикла.

Мой хрустальный шар становится нечетким, но в названии вашего метода 'слияние' есть еще одна подсказка. Допустим, слияние занимает два списка, и каждый список представляет собой список целых чисел, а под словом «слияние» вы подразумеваете возвращение нового списка сумм соответствующих значений в l1 и l2. Вот как выглядит слияние с циклом for:

def merge(l1, l2):
  retl = []
  for v1,v2 in zip(l1, l2):
    retl.append(v1+v2)
  return retl

Будучи новичком, вы должны изучить и освоить очень концепцию, называемую «списочным пониманием». Используя понимание списка, вы можете упростить ваш метод слияния до простого:

def merge(l1, l2):
  return [v1+v2 for v1,v2 in zip(l1, l2)]

Это эквивалентно предыдущей функции - пожалуйста, изучите их и посмотрите, как это работает. И наконец, в мгновение ока, набирающего уток в Python, запустите команду merge as-is , но на этот раз передайте ему список списков вместо списка целых чисел. (оставлено как упражнение для ОП.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...