我在列表中找到了明确的最小元素。要做到这一点,我已经对列表进行了排序,然后只选择了第一个,如果它小于第二个。
现在我有两个子列表而不是一个大列表。如果我在两个子列表上执行相同的过程,然后合并结果(只是有效地将它们排序为一个双元素列表),是否可以保证产生与在一个大列表中排序相同的结果?
目前,对于单元素列表,没有第二个元素不小于,因此我将其视为唯一的最小元素。
答案 0 :(得分:1)
a)[2, 3, 3]
- 唯一的最小元素:2
b)[1, 1, 2]
- 没有这样的元素
合并结果:[2]
- 唯一最小元素:2
大名单:[1, 1, 2, 2, 3, 3]
- 没有这样的元素
所以在这种情况下结果不一样 - 失败。
在这种情况下显然结果相同(没有这样的元素) - 确定
a)[a1, a2, ...]
- 有a1< a2和a1
- 唯一的最小元素
b)[b1, b2, ...]
- 那里b1< b2和b1
- 唯一的最小元素
如果a1 = b1则:
合并结果:[a1, b1]
- 没有唯一的最低
大名单:[a1, b1, ...]
- 没有唯一的最低要求
如果a1< b1(与a1> b1相同的逻辑)然后:
合并结果:[a1, b1]
- 唯一最小元素:a1
大列表可以是[a1, b1, ...]
或[a1, a2, ..., b1, ...]
- 唯一的最小元素:a1
因为a1< b1和a1< A2
所以在这种情况下结果相同 - 确定
该算法仅在第一种情况下失败,因此可以轻松改进。
我的改进建议:
当一个列表具有唯一的最小元素而其他列表没有时,因此结果会合并三个元素:来自一个列表的唯一最小元素(a1
)和来自其他列表的两个最小元素(b1
= {{1} })。
改进分析:
如果a1 = b1,那么在合并结果和大列表中的结果相同(没有唯一的最小值)。
如果a1< b1然后:
合并结果:b2
- 唯一最小元素:[a1, b1, b2]
大列表可以是a1
或[a1, b1, b2, ...]
- 唯一的最小元素:[a1, a2, ..., b1, b2, ...]
因为a1< b1和a1< A2
如果a1> b1然后:
合并结果:a1
- 没有唯一的最小值,因为b1 = b2
大名单:[b1, b2, a1]
- 没有唯一的最小值,因为b1 = b2
结果相同 - 确定
修改后的算法适用于所有三种情况!
答案 1 :(得分:0)
不,或者至少不是简单的。如果您的代码目前返回最小值或最小值,则不是唯一的#34;指标,然后它没有提供足够的信息。如果输入以下列表:
list1 = [1, 1]
list2 = [0]
然后在list1上运行您的程序只会告诉您最小的不唯一,并且您无法告诉两个列表一起具有唯一的最小值0。
如果您的代码返回最小值以及它是否唯一的指示符,您可以通过一些案例来完成:
min1, min1unique = uniquemin(list1)
min2, min2unique = uniquemin(list2)
if min1 == min2:
return min1, False
elif min1 < min2:
return min1, min1unique
else:
return min2, min2unique
我建议先将列表合并到一个列表中。另外,我建议避免排序:
minimum = min(l)
minimum_is_unique = l.count(minimum) == 1