我有以下输出:
[3, 3, 3], [4, 4, 4], [2, 4, 4], [4, 5, 1], [5, 5, 5], [2, 4, 3], [5, 5, 1], [4, 5, 4], [4, 5, 1], [2, 2, 2], [3, 3, 3], [5, 5, 5], [2, 2, 2], [3, 5, 3], [2, 2, 2], [1, 3, 1], [3, 3, 2], [2, 4, 4], [5, 5, 5], [3, 5, 3].
我如何用python测试每个块使用以下公式:
第一个数据块数小于或等于第三个数据块数大于或等于第二个数据块数?
例如,我可以测试第一个数据块,如果第三个数字在第一个和第二个范围内(例如)5号是第三个数字,1号是2号,2号是8号。。5号在2到8之间。)我可以打印True
或False
比较比使用in range(...)
更有效
all([start <= num and num <= end for start, end, num in lst])
性能测试输入:
lst = [[i, i+1, i+1] for i in range(1000)]
Within range(...)
:
代码:
%timeit [l[-1] in range(l[0], l[1]+1) for l in lst]
print(all([l[-1] in range(l[0], l[1]+1) for l in lst]))
输出:
1.22 ms ± 161 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
True
比较与
代码:
%timeit [start <= num and num <= end for start, end, num in lst ]
print(all([start <= num and num <= end for start, end, num in lst ]))
输出:
258 µs ± 29.7 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
True
使用range
:
lst = [3, 3, 3], [4, 4, 4], [2, 4, 4], [4, 5, 1], [5, 5, 5], [2, 4, 3], [5, 5, 1], [4, 5, 4], [4, 5, 1], [2, 2, 2], [3, 3, 3], [5, 5, 5], [2, 2, 2], [3, 5, 3], [2, 2, 2], [1, 3, 1], [3, 3, 2], [2, 4, 4], [5, 5, 5], [3, 5, 3]
>>> [l[-1] in range(l[0], l[1]+1) for l in lst]
[True, True, True, False, True, True, False, True, False, True,
True, True, True, True, True, True, False, True, True, True]
或comparisons
:
>>> [l[0]<=l[1]<=l[-1] for l in lst]
[True, True, True, False, True, True, False, True, False, True,
True, True, True, True, True, True, False, True, True, True]