"返回"居中"整数列表的平均值,我们将说的是值的平均值,除了忽略列表中的最大值和最小值。如果存在最小值的多个副本,则只忽略一个副本,同样为最大值。使用整数除法生成最终平均值。您可以假设列表长度为3或更长。"
这是我在家庭作业中遇到的一个问题,我很难找到如何找到最大/最小的数字并将它们从列表中删除。这是我到目前为止所拥有的。它适用于10/14我必须通过的场景..我认为这只是因为它抓住了中位数
def centered_average(nums):
x = 0
for i in range(len(nums)):
x = i + 0
y = x + 1
if y%2 == 0:
return (nums[y/2] + nums[(y/2)+1]) / 2
else:
return nums[y/2]
答案 0 :(得分:5)
对数组进行排序肯定是更简洁的代码,这里是手动循环的替代方法
max_value = nums[0]
min_value = nums[0]
sum = 0
for x in nums:
max_value = max(max_value, x)
min_value = min(min_value, x)
sum += x
return (sum - max_value - min_value) / (len(nums) - 2)
这只会添加所有内容并删除最后的最大值和最小值。
答案 1 :(得分:1)
如果列表不是太长,则对列表进行排序的计算成本不会太高:
sorted(nums)
然后你可以创建一个没有第一个和最后一个条目的新列表,它将是最小和最大的值:
new_nums = sorted(nums)[1:-1] # from index 1 to the next-to-last entry
答案 2 :(得分:1)
在开始之前,我知道使用函数排序在其他答案中提到了更简单的方法,是的,这是真的,但我相信你的老师必须让你能够掌握循环并在逻辑上使用它们。
首先选择您的第一个号码并将其指定为高低,不要担心以后会有意义。
def center average(nums):
high = nums[0]
small = nums[0]
这是神奇的事情,你循环浏览你的列表,如果你在循环中的数字大于先前的数字那么你可以用它替换变量high,让我演示。
for count in nums:
if count > high:
high = count
if count < low:
low = count
现在你有低和高你所做的就是将循环的值加在一起减去高和低(正如你所说的那样你不需要它们)。然后将这个答案除以len of nums。
for count in nums:
sum = count + sum
sum = sum - (high + low)
return sum
答案 3 :(得分:1)
新来的。我喜欢用在互联网上找到的解决方案来检查我的解决方案,但在这里还没有看到我的代码(因此是帖子)。我在 https://codingbat.com/prob/p126968 上发现了这个挑战。这是我的解决方案: ** 这是在 Python 3.9.1 中完成的。
首先使用 index 方法从列表中弹出最小值和最大值。之后只是简单的平均计算。
def centered_average(nums):
nums.pop(nums.index(max(nums)))
nums.pop(nums.index(min(nums)))
return sum(nums)/len(nums)
答案 4 :(得分:0)
如果我理解这个问题,这应该有效:
winston.loggers.add('mongoLog',{
transports : [
new(winston.transports.MongoDB)({
db : 'mongodb://xxxxx',',
collection : 'collection1',
level : 'info',
capped : true
}),
]
});
var mongoLog = winston.loggers.get('mongoLog')
mongoLog.info('hello')
winston.loggers.add('profileLog',{
transports : [
new(winston.transports.MongoDB)({
db : 'mongodb://xxxxx',
collection : 'collection2',
level : 'info',
capped : true
}),
]
});
var profileLog = winston.loggers.get('profileLog')
profileLog.error('user profile is not valid')
答案 5 :(得分:0)
def centered_average(nums):
nums = sorted(nums)
for i in range(len(nums)):
if len(nums)%2 != 0:
return nums[len(nums)/2]
else:
return ((nums[len(nums)/2] + nums[len(nums)/2 - 1]) / 2)
答案 6 :(得分:0)
这是解决问题的非常标准的解决方案。此代码是一个错误的代码,没有考虑任何复杂性和空间的考虑。但我认为要遵循的思维过程类似于代码中的步骤。然后可以改进。
def centered_average(nums):
#Find max and min value from the original list
max_value = max(nums)
min_value = min(nums)
#counters for counting the number of duplicates of max and min values.
mx = 0
mn = 0
sum = 0
#New list to hold items on which we can calculate the avg
new_nums = []
#Find duplicates of max and min values
for num in nums:
if num == max_value:
mx += 1
if num == min_value:
mn += 1
#Append max and min values only once in the new list
if mx > 1:
new_nums.append(max_value)
if mn > 1:
new_nums.append(min_value)
#Append all other numbers in the original to new list
for num in nums:
if num != max_value and num != min_value:
new_nums.append(num)
#Calculate the sum of all items in the list
for new in new_nums:
sum += new
#Calculate the average value.
avg = sum/len(new_nums)
return avg
答案 7 :(得分:0)
def centered_average(nums):
min1=nums[0]
max1=nums[0]
for item in nums:
if item > max1:
max1 = item
if item < min1:
min1 = item
sum1=(sum(nums)-(min1+max1))/(len(nums)-2)
return sum1
答案 8 :(得分:0)
简单解决方案
import os
import yaml
import codecs
def yaml_reader(filepath):
with codecs.open(filepath, "r", encoding='utf-8') as file_descriptor:
data = yaml.load_all(file_descriptor)
return data
def yaml_dump(filepath, data):
with open(filepath, 'w') as file_descriptor:
yaml.dump(data, file_descriptor)
if __name__ == "__main__":
filepath = os.listdir(os.getcwd())
data = yaml_reader(filepath)
print data
答案 9 :(得分:0)
max和min函数获得最大和最小数
def centered_average(nums):
return (sum(nums) - max(nums) - min(nums)) / (len(nums) - 2)
答案 10 :(得分:0)
def centered_average(nums):
sorted_list = sorted(nums)
return sum(sorted_list[1:-1])/(len(nums)-2)
这将完成工作。
答案 11 :(得分:0)
使用 list.index、list.pop、min 和 max 函数的 Python 3 解决方案。
def solution(input):
average = 0
minimum = min(input)
maximum = max(input)
input.pop(input.index(minimum))
input.pop(input.index(maximum))
average = round(sum(input) / len(input))
return average
答案 12 :(得分:-1)
def centered_average(nums):
maximums = []
minimums = []
sum_of_numbers = 0
length =len(nums) + (len(minimums)-1) + (len(maximums)-1)
for i in nums:
if i == max(nums):
maximums.append(i)
elif i == min(nums):
minimums.append(i)
else:
sum_of_numbers += i
if len(maximums)>=2 or len(minimums)>=2:
sum_of_numbers = sum_of_numbers + (max(nums)*(len(maximums)-1))(min(nums)*(len(minimums)-1))
return sum_of_numbers / length