Python 数据[i] 到数据[i+100] < #(例如 50)

Python data[i] to data[i+100] < # (eg. 50)

我有一个包含大量数据的列表。如果我想将 if 语句设置为下面的伪代码:

if data[i] to data[i+100] < 50:
    data[i] == 1

有什么方法可以让我不需要输入如下所示的内容吗?

data[i] <50 and data[i+1] <50 and data[i+2] <50 and .... and data[i+100] <50: 

因为太浪费时间了。如果有人知道更快的方法,请告诉我。赞赏!

是的,您可以在列表的 切片 上使用 all(..)

if all(x < 50 for x in data[i:i+101]):
    data[i] = 1 # probably you want assignment?

您必须将 i:i+101 写为切片(而不是 i:i+100),因为上限是 exclusive.

或者您可以使用 range(..) 并节省创建列表切片副本的费用:

if all(data[j] < 50 for j in range(i,i+101)):
    data[i] = 1 # probably you want assignment?

注意,虽然你没有单独输入所有这些条件,当然Python仍然会执行迭代(并且评估最多 101个这样的表达式)。

当然可以。你可以map over the values, checking your requirement, and then can use all确保他们满足它:

>>> data = range(1000)
>>> all(map(lambda i: i < 50, data[:100]))
# => True

分解发生的事情:

  • data[:101] 获取数组中前 101 项的切片
  • map 迭代这些项目,如果通过我们的检查 i < 50,returns 一个布尔值。 IE。结果列表是 [True, True, True, ...]
  • all 然后检查每个值是否为 True

然后你可以用一些智能切片来替换这些项目:

if all(map(lambda i: i < 50, data[:100])):
     data = [1] * 100 + data[100:]

是的。

if all(data[i+k] < 50 for k in range(0,101)):