作为大学课程的一部分,我已经在python中编写了超过2周的编码。
我现在将尝试描述该计划的目的,但由于我的英语似乎不够,所以它有点难。
在我的课程中,我要编写一个带有numpy数组的函数。该函数应编译一个在小数点前具有相同整数的数字列表,但仅限于有3个或更多具有相同整数的数字。
例如,如果列表中包含1.4,1.5和1.6,则所有三个都将编译到结果列表中。如果输入列表是2.3,2.5,3.5,则不会编译任何内容,因为没有相同整数出现三次的情况。
我的代码如下所示:
def removeIncomplete2(id):
ip = id
for N in range(np.size(ip)):
ip[N] = np.round(ip[N]-0.5,0)
x = 0
for N in range(np.size(ip)):
for n in range(np.size(ip)):
if ip[N]==ip[n]:
x = x + 1
if x > 3 and x != 0:
id = np.delete(id, id[N])
x = 0
id = id[id > 0]
return id
我输入的测试是:
removeIncomplete2(numpy.array ([1.3, 2.2, 2.3, 4.2, 5.1, 3.2, 5.3, 3.3, 2.1, 1.1, 5.2, 3.1])
)
它应该返回
[ 2.2 2.3 5.1 3.2 5.3 3.3 2.1 5.2 3.1]
但返回:
[ 1. 2. 2. 4. 5. 3. 5. 3. 2. 1. 5. 3.]
我被困住了,欢迎任何建议。我是这个编码的新手,我不知道它为什么吐出它的作用,我不知道如何解决它。 任何帮助都很受欢迎!
答案 0 :(得分:1)
我想我得到了你要求的东西。请检查一下。如果它是你想要的,我们可以更多地澄清原始问题。它会产生您指定的数字。
import math
import numpy
original_numbers = numpy.array([1.3, 2.2, 2.3, 4.2, 5.1, 3.2, 5.3, 3.3, 2.1, 1.1, 5.2, 3.1])
result_specification = numpy.array([2.2, 2.3, 5.1, 3.2, 5.3, 3.3, 2.1, 5.2, 3.1])
def remove_incomplete(numbers):
whole_number_tracker = {}
# track occurrences of each whole number
for number in numbers:
whole_number = int(math.floor(number))
whole_number_tracker.setdefault(whole_number, []).append(number)
# compile all numbers that have more than three of the same whole number
result = []
for whole_number, full_numbers in whole_number_tracker.items():
if len(full_numbers) >= 3:
result.extend(full_numbers)
return result
result = remove_incomplete(original_numbers)
print(result)
print(result_specification)