Есть ли более элегантный / питонический способ выразить эту конструкцию?

itemList = ["a","b","c","d","e","f","g","h"] aa = "NULL" bb = "NULL" cc = "NULL" for item in itemList: aa = bb bb = cc cc = item if aa == "NULL": continue print "%s_%s_%s" % (aa, bb, cc) 

3 Solutions collect form web for “Есть ли более элегантный / питонический способ выразить эту конструкцию?”

 >>> ['_'.join(itemList[i:i+3]) for i in range(len(itemList)-2)] ['a_b_c', 'b_c_d', 'c_d_e', 'd_e_f', 'e_f_g', 'f_g_h'] 

или если вы настаиваете на печати:

 >>> for i in range(len(itemList)-2): print('_'.join(itemList[i:i+3])) 
 import itertools def windows(iterable, length=2): return itertools.izip(*(itertools.islice(it,n,None) for n,it in enumerate(itertools.tee(iterable,length)))) itemList = ["a","b","c","d","e","f","g","h"] for group in windows(itemList,length=3): print('_'.join(group)) 

Исключительное понимание списка SilentGhost лучше для этой проблемы. Но просто чтобы объяснить, почему я не удаляю этот пост:

Однажды вы захотите создать окна из итератора, который не является списком. Поскольку вы не можете взять длину итератора, не потребляя его (а также, поскольку некоторые итераторы могут быть бесконечными), а так как взятие срезов из итератора всегда возвращает новые значения, вы не можете использовать понимание списка ['_'.join(itemList[i:i+3]) for i in range(len(itemList)-2)] в этом случае.

Тогда функция windows действительно полезна. Например:

 def itemList(): for x in range(8): yield str(x) for group in windows(itemList(),length=3): print('_'.join(group)) 

доходность

 0_1_2 1_2_3 2_3_4 3_4_5 4_5_6 5_6_7 

Вы можете использовать deque .

 itemList = ["a","b","c","d","e","f","g","h"] buffer = collections.deque(maxlen=3) for item in itemList: buffer.append(item) if len(buffer) != 3: continue print "%s_%s_%s" % (buffer) 

Сейчас у меня нет интерпретатора Python, но я думаю, что это должно сработать.

  • Получить элемент списка по атрибуту в Python
  • «Python way» для синтаксического анализа и условной замены каждого элемента в 2D-списке
  • бесконечное назначение в списке python?
  • Получить индекс первого списка, содержащий подстроку?
  • Проверка элемента в списке подстрокой
  • Как рассчитать средние значения по столбцам в данной структуре данных?
  • Python набирает длину списка в подсписке
  • Особенности членства в списке
  • Python - лучший язык программирования в мире.