gpt4 book ai didi

python - 检查元素在Python中是否乱序

转载 作者:太空宇宙 更新时间:2023-11-04 03:38:11 24 4
gpt4 key购买 nike

我想检查列表的元素,看看它们与字典相比是否乱序。

我有以下代码:

list = ['jump','double blink']
dictionary = collections.OrderedDict([("wink", 1), ("double blink", 10),
("close your eyes", 100), ("jump", 1000)])

如果我检查列表的元素,它应该返回 False,因为在字典中“jump”出现在“double blink”之后。

起初,我想我可以使用for循环来检查列表中的 Action 索引是否小于字典中下一个 Action 的索引。

这实际上是将键列表中“跳转”的位置(3)与列表中下一个 Action 的字典索引进行比较(下一个项目是“double blink”,它有一个索引1).所以 4 < 1 会返回 false,但我不确定如何调用 for 循环中的下一项而不会出现列表超出范围错误。

最佳答案

您可以使用 zip()获取当前项目和它旁边的项目(不涉及索引,所以不用担心 IndexError),然后 all()使用生成器表达式将完成剩下的工作:

>>> lst = ['jump','double blink']
>>> all(dictionary[f] < dictionary[s] for f, s in zip(lst, lst[1:]))
False
>>> lst = d.keys()
>>> all(dictionary[f] < dictionary[s] for f, s in zip(lst, lst[1:]))
True

这里 zip() 返回如下内容:

>>> zip(lst, lst[1:])
[('wink', 'double blink'), ('double blink', 'close your eyes'), ('close your eyes', 'jump')]

另一种选择是使用 pairwise recipe from itertools's recipes ,它使用迭代器做完全相同的事情:

>>> from itertools import tee, izip
>>> def pairwise(iterable):
"s -> (s0,s1), (s1,s2), (s2, s3), ..."
a, b = tee(iterable)
next(b, None)
return izip(a, b)
...
>>> all(dictionary[f] < dictionary[s] for f, s in pairwise(lst))
True
>>> list(pairwise(lst))
[('wink', 'double blink'), ('double blink', 'close your eyes'), ('close your eyes', 'jump')]

关于python - 检查元素在Python中是否乱序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27875226/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com