Python:查找列表对的一个成员中的连续变化,报告其他成员

标签 python list list-comprehension

必须有一种更简单、更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/

相关文章:

python - 是否可以将此循环转换为 python 中的列表理解

python - 如何从字符串列表中删除\n

c# - 使用linq将几个列表合并为一个

python - 使用Python将包含一些关键字的字符串分成列表

python - PCA 和朴素贝叶斯分类器

python - 在列表理解中迭代列表的一部分

F# 中的 Haskell 列表推导式守卫

python - 查找数学表达式中最外层括号内包含的文本

python - PIL 保存时改变像素值

python - 使用 Python 从 CSV 文件创建列表