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)):
我有一个包含大量数据的列表。如果我想将 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)):