A= [[], [2, 3], [1], [1], [3]]
我有一份清单清单。我想要做的是确定列表中的最佳数字(代表一个选择)。 ---这样做的一般算法
规则:
1)所有列表都按降序排列(从左到右),因此我们始终选择较早的子列表中的数字(在本例中为[2, 3]
)
2)如果有多个号码(无法确定),我们会继续往下走,直到该号码出现在下面最早的子列表中。在A
的情况下,[1]
都不包含2或3,而最后一项[3]
包含3,我们认为A
中的最佳数字是3。 / p>
我会更多地举例说明。
B=[[5], [0, 8], [0, 8], [0, 8], [1]]
最佳数字是5。
C=[[0, 1], [0, 3], [0], [0], [2]]
最佳数字是0。
D=[[], [3, 6], [3, 5, 6], [6], [1]]
最好的数字是6。
任何人都知道如何编写算法......卡住了。
感谢。
答案 0 :(得分:1)
您可以分三步完成:
[5]
def find_best(choices):
# make a set of valid output numbers
valid_numbers = {sublist[0] for sublist in choices if len(sublist) == 1}
# flatten the nested input list
flat_list = (number for sublist in choices for number in sublist)
# find the first number that's a valid output
return next(number for number in flat_list if number in valid_numbers)
print(find_best([[], [2, 3], [1], [1], [3]])) # 3
print(find_best([[5], [0, 8], [0, 8], [0, 8], [1]])) # 5
print(find_best([[0, 1], [0, 3], [0], [0], [2]])) # 0
print(find_best([[], [3, 6], [3, 5, 6], [6], [1]])) # 6
答案 1 :(得分:0)
Aran-Fey的答案不适用于输入[[],[3,6],[3,5],[6],[1]],最佳选择是3,他的答案返回6 ... 这是一个适用于所有情况的函数,如果无法选择将它们分开,则返回遇到的所有第一个候选列表。
def find_best(list_of_lists):
i = 0
while len(list_of_lists[i]) == 0:
i+=1
list_containing_candidates = list_of_lists[i][:]
if len(list_containing_candidates) == 1 :
return list_containing_candidates[0]
else:
if i+1 < len(list_of_lists):
for next_list in list_of_lists[i+1:]:
for candidate in list_containing_candidates[:]:
if candidate not in next_list:
list_containing_candidates.remove(candidate)
if len(list_containing_candidates) == 0:
list_containing_candidates = list_of_lists[i][:]
elif len(list_containing_candidates) == 1:
return list_containing_candidates[0]
return list_of_lists[i] # ambigous case, entire list of candidates returned
print(find_best([[], [2, 3], [1], [1], [3]])) # 3
print(find_best([[5], [0, 8], [0, 8], [0, 8], [1]])) # 5
print(find_best([[0, 1], [0, 3], [0], [0], [2]])) # 0
print(find_best([[], [3, 6], [3, 5, 6], [6], [1]])) # 6
print(find_best([[], [3, 6], [3, 5], [6], [1]])) # 3
print(find_best([[1,3 ], [1, 3], [1,2,3], [1,3], []])) # [1,3]