使用大于或小于运算符比较两个列表
- 2025-01-09 08:47:00
- admin 原创
- 81
问题描述:
我最近注意到一段代码直接比较两个整数列表,如下所示:
a = [10,3,5, ...]
b = [5,4,3, ...,]
if a > b:
...
这看起来有点奇怪,但我想象True
如果 的所有list_a
元素都大于 ,它就会返回list_b
,如果每个元素相等或list_b
的元素大于,它就会返回 False list_a
。所以我测试了一下:
>>> a=[3,3,3,3]
>>> b=[4,4,4,4]
>>> a>b
False
>>> b>a
True
好的,成功了。如下所示:
>>> b = [1,1,1,1]
>>> a = [1,1,1,1]
>>> a>b
False
>>> b>a
False
但当它变得更加模糊时:
>>> a=[1,1,3,1]
>>> b=[1,3,1,1]
>>> a>b
False
>>> b>a
True
或者:
>>> a=[1,3,1,1]
>>> b=[1,1,3,3]
>>> a>b
True
>>> b>a
False
结果有点奇怪。python 到底在做什么?它似乎返回第一个列表的结果,其中最左边的元素大于相应的元素?
解决方案 1:
来自Python 教程中的比较序列和其他类型:
比较使用字典顺序:首先比较前两个项目,如果它们不同,则确定比较的结果;如果它们相等,则比较接下来的两个项目,依此类推,直到任一序列都用尽。
另请参阅有关词典顺序的维基百科文章。
解决方案 2:
由于我一开始并没有发现使用“字典顺序”进行列表/元组比较的解释特别有启发性,因此这里尝试“用我自己的话”来解释它。首先,下面是一些示例列表,在下面的解释中引用它们:
a = [1, 2, 3]
b = [1, 2, 10]
c = [1, 2, 3, 100]
d = [1, 2, 3]
e = [1, 2, 3, 4, 'a']
f = ['a', 'b', 'c']
依次比较每个索引处的一对项目。因此,与 进行比较a
将b
导致1
与 进行比较1
、2
与 进行比较2
以及与3
进行比较10
。
当发现不相等的一对项目或(如果列表的长度不同)到达较短列表的末尾时,对的比较将停止。
例如,比较a
和时,当和相比较b
时,比较将停止。比较和 时,当和相比较时,比较将停止。3
`10b
c10
3`
一旦发现不相等的对,总结果就是比较不相等项的结果。无论列表的长度是否相同,这都适用 - 例如,listb
大于 list,c
因为100
inc
从未发挥作用。
例如,当与 进行比较时a
,总体结果将是与b
进行比较的结果。因为小于。因为不大于。因为不等于。3
`10a < b -> True
310
a > b -> False3
10a == b -> False
3`10
如果其中一个列表较短,并且其 N 个项目等于较长列表的前 N 个项目,如a
和c
,则较短列表将被认为小于较长列表(因此a
小于c
)。
仅当两个列表的长度相同且所有项目对的比较结果相等时,它们才会比较结果相等。
关于类型的注意事项:如果一对中的项不可比较,则比较将TypeError
像往常一样失败。例如,当将列表与与进行比较时,将列表a
与的比较f
将失败。但也请注意,列表和可以进行比较,因为中的永远不会与中的任何内容进行比较。1
`'a'd
e'a'
e`d
解决方案 3:
给出的答案没有考虑较大列表中的重复项,您可以遍历较大的列表并每次对其进行切片以将其与子列表进行比较,这样既可以保持顺序又可以考虑重复项。
此代码可行:
def check_sublist(List,Sublist)
for i in range(len(List)):
if List[i:] ==Sublist:
return True
return False
是的,这并不节省时间,但这是唯一的解决方案,因为我能想到的,因为使用 set() 不会保持顺序