Webpack не переносится на ES5

Мне нужно что-то, что займет два списка и может сделать то, что diff в bash. Поскольку этот вопрос появляется сначала, когда вы ищете «python diff two lists» и не очень специфичен, я опубликую то, что я придумал.

Используя SequenceMather из difflib вы можете сравнить два списка, например diff. Ни один из других ответов не скажет вам, где эта разница, но это делает. Некоторые ответы дают разницу только в одном направлении. Некоторые переупорядочивают элементы. Некоторые не обрабатывают дубликаты. Но это решение дает вам истинную разницу между двумя списками:

a = 'A quick fox jumps the lazy dog'.split()
b = 'A quick brown mouse jumps over the dog'.split()

from difflib import SequenceMatcher

for tag, i, j, k, l in SequenceMatcher(None, a, b).get_opcodes():
  if tag == 'equal': print('both have', a[i:j])
  if tag in ('delete', 'replace'): print('  1st has', a[i:j])
  if tag in ('insert', 'replace'): print('  2nd has', b[k:l])

Это выдает:

both have ['A', 'quick']
  1st has ['fox']
  2nd has ['brown', 'mouse']
both have ['jumps']
  2nd has ['over']
both have ['the']
  1st has ['lazy']
both have ['dog']

Конечно, если ваше приложение делает те же предположения, что и другие ответы, вы выиграете от них больше всего. Но если вы ищете истинную функциональность diff, то это единственный способ пойти.

Например, ни один из других ответов не может обрабатывать:

a = [1,2,3,4,5]
b = [5,4,3,2,1]

Но это делает:

  2nd has [5, 4, 3, 2]
both have [1]
  1st has [2, 3, 4, 5]

0
задан Dennis Fink 21 March 2019 в 11:59
поделиться