我正在寻找一个包含类对象列表的类对象的深层副本,每个类对象都有自己的一组内容。这些对象不包含任何比整数和列表更令人兴奋的东西(没有字典,没有等待生成的生成器等)。我正在一个循环中对 500-800 个对象执行深度复制,这确实减慢了程序速度。我意识到这已经是低效了;目前无法更改。
其外观示例:
import random
import copy
class Base:
def __init__(self, minimum, maximum, length):
self.minimum = minimum
self.maximum = maximum
self.numbers = [random.randint(minimum, maximum) for _ in range(length)]
# etc
class Next:
def __init__(self, minimum, maximum, length, quantity):
self.minimum = minimum
self.maximum = maximum
self.bases = [Base(minimum, maximum, length) for _ in range(quantity)]
# etc
Run Code Online (Sandbox Code Playgroud)
由于我对对象执行的操作,我无法浅复制。我需要新变量拥有的内容:
> first = Next(0, 10, 5, 10)
> second = first
> first.bases[0].numbers[1] = 4
> print(first.bases[0].numbers)
> [2, 4, 3, 3, 8] …Run Code Online (Sandbox Code Playgroud) 一行代码绊倒了我:
>>> i = 1
>>> j = 1
>>> i += j > 0 and i
>>> print(i)
2
Run Code Online (Sandbox Code Playgroud)
使这项工作的基础机制或系统是什么?这似乎是它的语法糖i = i + i if j > 0 else i,但解压缩了很多.我错了吗?还有其他系统在玩我不知道吗?
谢谢!
编辑:
为清楚起见:
>>> i = 3
>>> j = 2
>>> i += j > 1 and i
>>> i
6
Run Code Online (Sandbox Code Playgroud) 这个问题来自谷歌Foobar,我的代码传递了除最后一次测试以外的所有测试,其中隐藏了输入/输出.
换句话说,选择数组的两个元素x [i]和x [j](i与j不同)并同时将x [i]递增1并将x [j]递减1.您的目标是得到数组中的许多元素都具有相同的值.
例如,如果数组是[1,4,1],您可以执行如下操作:
从第一辆车发送一只兔子到第0辆:增加x [0],递减x [1],得到[2,3,1]从第一辆车发送一只兔子到第二辆:增加x [2],减少x [1],得到[2,2,2].
现在阵列中的所有元素都是相同的,并且您有一个向Beta Rabbit报告的策略!
请注意,如果数组是[1,2],我们可以得到的最大可能相等元素数是1,因为汽车中的兔子数量永远不会相同.
编写一个函数answer(x),它取整数x的数组,并根据需要多次执行上述命令,返回我们可以获得的相等数组元素的最大数量.
列车中的汽车数量(x中的元素)至少为2,不超过100.想要共享汽车的兔子数量(x的每个元素)将是[0的范围内的整数],百万].
from collections import Counter
def most_common(lst):
data = Counter(lst)
return data.most_common(1)[0][1]
def answer(x):
"""The goal is to take all of the rabbits in list x and distribute
them equally across the original list elements."""
total = sum(x)
length = len(x)
# Find out how many are left over when distributing niavely.
div, mod = divmod(total, length)
# Because of the variable …Run Code Online (Sandbox Code Playgroud)