必须有一种更简单、更Pythonic的方法来做到这一点。
鉴于此对列表:
pp = [('a',1),('b',1),('c',1),('d',2),('e',2)]
如何最轻松地找到相邻对中第二个项目发生变化的第一个项目(此处从 1 变为 2)。因此我正在寻找 ['c','d']。假设整个列表的pair[1]中只有一个变化,但它可能是一个字符串。
这段代码可以工作,但看起来又长又麻烦。
for i, pair in enumerate(pp):
if i == 0:
pInitial = pair[0]
sgInitial = pair[1]
pNext = pair[0]
sgNext = pair[1]
if sgInitial == sgNext:
sgInitial = sgNext
pInitial = pNext
else:
pOne = pInitial
pTwo = pNext
x = [pOne, pTwo]
print x
break
谢谢 蒂姆
最佳答案
import itertools as it
pp = [('a',1),('b',1),('c',1),('d',2),('e',2)]
# with normal zip and slicing
for a,b in zip(pp,pp[1:]):
if a[1] != b[1]:
x=(a[0],b[0])
print x
break
# with generators and izip
iterfirst = (b for a,b in pp)
itersecond = (b for a,b in pp[1:])
iterfirstsymbol = (a for a,b in pp)
itersecondsymbol = (a for a,b in pp[1:])
iteranswer = it.izip(iterfirstsymbol, itersecondsymbol, iterfirst, itersecond)
print next((symbol1, symbol2)
for symbol1,symbol2, first, second in iteranswer
if first != second)
添加了我的可读生成器版本。
关于Python:查找列表对的一个成员中的连续变化,报告其他成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3601934/