我正在尝试编写一个python 3函数,该函数查找列表(未指定长度)中不属于对的所有数字。
例如,给定列表[1, 2, 1, 3, 2]
,函数将返回3;并且给定列表[0, 1, 1, 7, 8, 3, 9, 3, 9]
,该函数将返回0,7和8。
感谢您的帮助!
答案 0 :(得分:0)
您可以使用以下功能:
>>> def find(l):
... return (i for i in l if l.count(i)==1)
>>> l= [0, 1, 1, 7, 8, 3, 9, 3, 9]
>>> list(find(l))
[0, 7, 8]
此函数将返回一个生成器,该生成器包含列表中的元素,这些元素的计数等于1。
答案 1 :(得分:0)
我可以告诉你我该怎么做。它是什么意思"对"? 你应该说,找到数组中奇怪重复的所有数字。
第一个计划:(效率更高!) 对列表进行排序,然后通过列表中的单个循环应该足以找到每个列表中有多少个,并且您可以生成另一个将返回的列表。
第二个计划(在python中更好,但由于通过孔列表的评估数量,也更昂贵): 尝试Kasra的解决方案。 '计算'功能来自' list' type有助于我们的代码而不是我们的效率。它会计算显示值' i'在列表中,显然是
。如果该对需要"关闭对"我的意思是,如果你有三个(1个),你有一对还有一个1?或者你有1个配对吗?如果是第二个,Kasra的解决方案就是Ok。否则你应该比较:
if l.count(i) % 2 == 1
答案 2 :(得分:0)
使用collections.Counter可以轻松有效地完成3行。
from collections import Counter
def unpaired(numbers):
for key, count in Counter(numbers).items():
if count % 2:
yield key
print(list(unpaired([1, 2, 1, 3, 2])))
# [3]
print(list(unpaired([0, 1, 1, 7, 8, 3, 9, 3, 9])))
# [0, 7, 8]
答案 3 :(得分:0)
如果有三个相等的数字,或者有一对和一个没有对的单个数字,我的答案会成对。
def name(array):
o = sorted(array)
c = []
d = []
for i in o:
if o.count(i) % 2 == 1:
c.append(i)
for j in c:
if j not in d:
d.append(j)
return d
或者不要在j
中用于c
,而直接使用:
return list(set(c))
例如:
array = [0, 1, 1, 7, 8, 3, 9, 3, 9, 9]
output: [0, 7, 8, 9]