Проблема с этим упражнением для новичка на Python. Использование списков и поиск, если два соседних элемента совпадают - PullRequest
0 голосов
/ 21 марта 2010

Вот что я получил:

# D. Given a list of numbers, return a list where
# all adjacent == elements have been reduced to a single element,
# so [1, 2, 2, 3] returns [1, 2, 3]. You may create a new list or
# modify the passed in list.
def remove_adjacent(nums):
  for number in nums:
    numberHolder = number

  # +++your code here+++
  return

Я застрял здесь. Что я могу сделать?

Ответы [ 4 ]

5 голосов
/ 22 марта 2010
>>> import itertools
>>> [i[0] for i in itertools.groupby([1,2,2,3,3,3,2,2])]
[1, 2, 3, 2]

Или:

>>> def f(l):
...     r = []
...     last = None
...     for i in l:
...         if i != last:
...             r.append(i)
...             last = i
...     return r        
... 
>>> f([1,2,2,3,3,3,4,4,2,2])
[1, 2, 3, 4, 2]
1 голос
/ 22 марта 2010

попробуйте это:

def remove_adjacent(nums):
  removed_list = []
  numberHolder = None
  for number in nums:
    if number != numberHolder:
       removed_list.append(number)
       numberHolder = number
  return removed_list
0 голосов
/ 22 марта 2010

Это еще одно решение, основанное на filter (). Это не только для смежных и равных элементов, но и для равных элементов:

def remove_repeated_items(collection):
   uniques = []
   def not_already_added(item):
      if item in uniques:
         return False
      else:
         uniques.append(item)
         return True
   return filter(not_already_added, collection)

А потом:

repeated = [1,2,2,3,3]
print remove_repeated_items(repeated)
0 голосов
/ 21 марта 2010

Сравнить текущий номер с предыдущим номером. Если это не то же самое, добавьте его в новый список. Затем сохраните его, чтобы следующий цикл мог его использовать.

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