我如何遍历整数列表,并引用字典中最大的键(所有整数),使其小于当前值?



我有一个正整数字典作为keys,values对我的问题不重要。

另外,我正在迭代一个list of integers,我想引用字典中最大的键,它小于我在列表中迭代的当前整数(如果它存在!)。

例如:

from collections import defaultdict
def Loep(obstacles):
my_dict = defaultdict(int)
output = []
for i in range(len(obstacles)):
if max(j for j in my_dict.keys() if j<= obstacles[i]):
temp = max(j for j in my_dict.keys() if j<= obstacles[i])
my_dict[obstacles[i]] = temp + 1
output.append(my_dict[obstacles[i]])
else:
my_dict[obstacles[i]] = 1
output.append(my_dict[obstacles[i]])

print(Loep([3,1,5,6,4,2]))

我得到了上面的'if' statement错误-我相信这是因为我在max()中有太多的参数,任何想法如何修改代码?

错误是:ValueError: max() arg is an empty sequence

我试过把它分开,但是我做不到。

像这样:

from collections import defaultdict
def Loep(obstacles):
my_dict = defaultdict(int)
my_dict.update({
1: 0,
2: 0,
3: 0,
4: 0,
5: 0,
6: 0,
})
output = []
for obstacle in obstacles:
keys = [j for j in my_dict.keys() if j <= obstacle]
if keys:
# there is at least one qualifying key
key = max(keys)
my_dict[obstacle] = key + 1
output.append(my_dict[obstacle])
else:
my_dict[obstacle] = 1
output.append(my_dict[obstacle])
return output
print(Loep([3, 1, 5, 6, 4, 2]))

作为对你关于一行完成的评论的回应…是的,你可以这样压缩:

for obstacle in obstacles:
key = max([None]+[j for j in my_dict.keys() if j <= obstacle])
if key is not None:
# etc

. .当然还有其他方法可以做到……使用过滤器。或者其他方式…但最终你不仅要得到最大值,还要让最大值低于一个特定的值。除非你正在处理非常大的数据量,或者需要极高的速度。这是最简单的方法。

试试这个。这是你想要的吗?

from collections import defaultdict
def Loep(obstacles):
my_dict = defaultdict(int)
output = []
for i in range(len(obstacles)):
founds = [j for j in my_dict.keys() if j <= obstacles[i]]
if founds:
max_val = max(founds)
my_dict[obstacles[i]] = max_val + 1
else:
my_dict[obstacles[i]] = 1
output.append(my_dict[obstacles[i]])
return output
print(Loep([3, 1, 5, 6, 4, 2]))

相关内容

  • 没有找到相关文章

最新更新