【问题标题】:What's the best way of comparing slices of a list in Python?在 Python 中比较列表切片的最佳方法是什么?
【发布时间】:2021-12-23 15:54:40
【问题描述】:

我试图在 Python 中比较列表的切片但无济于事?有没有更好的方法来做到这一点?

我的代码(尝试让 slice 返回 True)

a = [1,2,3]

# Slice Assignment
a[0:1] = [0,0]

print(a)


# Slice Comparisons???
print(a[0:2])
print(a[0:2] == True)
print(a[0:2] == [True, True])

我的结果

[0, 0, 2, 3]
[0, 0]
False
False

【问题讨论】:

  • 不清楚您要在此处比较切片 to 的内容。您想将列表中的所有元素与一个值进行比较,还是按元素比较两个大小相似的切片?
  • @chthonicdaemon 很抱歉这次事故。我想按元素比较两个大小相似的切片
  • 您将切片与单个布尔值进行比较,当然您会得到False(切片永远不会等于单个值)。然后您将[0, 0][True, True] 进行比较,即[1, 1] 并再次(正如人们所期望的那样)您得到False。你为什么感到惊讶?
  • 您的代码对我来说工作正常(并且如预期的那样)。请查看slices 的工作原理。

标签: python list slice


【解决方案1】:

由于切片返回列表并且列表会自动按元素进行比较,因此您只需使用==

>>> a = [1, 2, 3, 1, 2, 3]
>>> a[:3] == a[3:]
True

要与固定值进行比较,您需要付出更多努力:

>>> b = [1, 1, 1, 3]
>>> all(e == 1 for e in b[:3])
True
>>> all(e == 1 for e in b[2:])
False

奖励:如果您正在执行大量数组计算,您可能会从使用 numpy 数组中受益:

>>> import numpy as np
>>> c = np.array(b)
>>> c[:3] == 1  # this automatically gets applied to all elements
array([ True,  True,  True])
>>> (c[:3] == 1).all()
True

【讨论】:

  • 谢谢!有没有办法可以与固定值进行比较?例如:我想检查前 3 个字符是否为零,因此类似于 a[:3] == [0,0,0]
  • 您可以使用not any(a[:3]) 检查前三个值是否全为零。这样做是检查切片中哪里有非零,然后反转真值。
【解决方案2】:

目前还不太清楚你到底想做什么,

当您打印时,a[0:2] 是 [0,0],您正在尝试将列表与不同类型的布尔值进行比较,因此它们是不同的

在第二个中,您将 [0,0] 与 [True, True] 进行比较,python 逐个元素比较列表,0 评估为 false,因此 [False, False] 显然不是 == 到 [对对对]

您能否编辑您的问题并添加您希望代码执行的操作?我会在评论中添加这个,但我还没有足够的代表:)

【讨论】:

    猜你喜欢
    • 2020-08-07
    • 1970-01-01
    • 2018-06-07
    • 1970-01-01
    • 2014-07-15
    • 1970-01-01
    • 2015-08-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多