我有一本字典,其关键是视频的开始时间,其值为结束时间。每个键值对代表不同的组。如何检查号码是否在范围内。 例如:
dictvid = {146: 209, 509: 539, 0: 145, 304: 320}
0至539-210至303和321至508需要在另一本词典中 即
newgroup = {210:303,321:508}
答案 0 :(得分:1)
您可以从每个键值对构造一个范围对象,这将为您提供O(n)解决方案(用于遍历字典的O(n)+用于每个内部 FocusNode focusNode = FocusNode();
@override
Widget build(BuildContext context) => Scaffold(
body: Column(
children: <Widget>[
TextField(
autofocus: true,
onEditingComplete: (() => focusNode.requestFocus())
),
TextField(
focusNode: focusNode,
)
]
)
);
检查的O(1)范围对象)。请注意in
,因为范围对象最后是互斥的。
+ 1
输出
print(any(208 in range(start, end + 1) for start, end in dictvid.items()))
print(any(211 in range(start, end + 1) for start, end in dictvid.items()))
答案 1 :(得分:1)
from itertools import chain, groupby
dictvid = {146: 209, 509: 539, 0: 145, 304: 320}
i_from = 0
i_to = 539
out = dict()
s = sorted(set(range(i_from, i_to+1)).difference(chain.from_iterable(range(k, v+1) for k, v in dictvid.items())))
for _, g in groupby(enumerate(s), lambda v: v[0]-v[1]):
l = [*g]
out[l[0][1]] = l[-1][1]
print(out)
打印:
{210: 303, 321: 508}