Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python-更改列表的长度但保持总和不变_Python_List_Python 2.7_Size - Fatal编程技术网

Python-更改列表的长度但保持总和不变

Python-更改列表的长度但保持总和不变,python,list,python-2.7,size,Python,List,Python 2.7,Size,我想减少列表的长度(例如,从len(list1)=L到len(list2)=M,其中M如果您的任务不超过您的描述,我建议这样做:删除L-M元素,然后将删除元素的总和添加到列表中的一个元素。下面是一个工作示例: >>> list1 = [1,2,3,4,5,6,7,8,9,10] >>> sum(list1) 55 >>> M = 7 >>> sum_removed = sum(list1[M:]) >>>

我想减少列表的长度(例如,从
len(list1)=L
len(list2)=M
,其中
M如果您的任务不超过您的描述,我建议这样做:删除
L-M
元素,然后将删除元素的总和添加到列表中的一个元素。下面是一个工作示例:

>>> list1 = [1,2,3,4,5,6,7,8,9,10]
>>> sum(list1)
55
>>> M = 7
>>> sum_removed = sum(list1[M:])
>>> sum_removed
27
>>> list2 = list1[:M]
>>> list2
[1, 2, 3, 4, 5, 6, 7]
>>> list[-1] += sum_removed
>>> list2[-1] += sum_removed
>>> list2
[1, 2, 3, 4, 5, 6, 34]
>>> sum(list2)
55
作为一项功能:

def truncate_same_sum(lst, truncate_length):
    sum_removed = sum(lst[truncate_length:])
    res = lst[:truncate_length]
    res[-1] += sum_removed
    return res

>>> list1
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> truncate_same_sum(list1, 7)
[1, 2, 3, 4, 5, 6, 34]

听起来您应该从列表中弹出最小的元素,然后将其添加到下一个最小的元素

while len(my_list) > M:
    my_list.sort(reverse=True) #largest to smallest
    x = my_list.pop()
    my_list[-1] += x

我们可以保证M大于零,因为元素的和总是零

记住这一点,您可以从列表中弹出两个元素并附加它们的总和

a, b = list.pop(), list.pop()
list.append(a + b)

如果您需要list1和list2不同,请在开始时将其复制到list2。

您想要什么并不完全清楚,因此有一些选项:

如果清除最后5个元素,这些元素有一个和,f.e.23 同一个列表中的所有其他元素,让我说10,必须变大,在中间:每个值2.3。无论你给每个值加2.3,还是尝试用23的总和计算随机值,这是你的决定

保存边界之间的所有值取决于元素、总和和边界

def eliminate_elements(my_list, number_of_elements_to_kill):
    len_old = len(my_list)
    len_new = len_old - number_of_elements_to_kill

    sum_rest = 0.
    for element in my_list[-number_of_elements_to_kill:]:
        sum_rest += element

    for i in range(len_new):
        my_list[i] += sum_rest/len_new

    for i in range(len_new,len_old):
        del my_list[len_new]

a = [1,2,3,4,5,6,7,8]
eliminate_elements(a,2)
print a

我投票结束这个问题,因为堆栈溢出不是一个代码编写服务。