我有一个正整数字典作为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]))