我的问题有两个部分:首先,假设我们有一个元素列表:
l=['x1','x2','x3','x4']
如何为每个元素分配权重?例如,在开始时,所有元素都具有权重1。我的第二部分问题是随机混合两个元素并制作一个新元素。所以新的列表将是:
l=['x1','x2','x3','x4','x5']
其中'x5'现在的权重为:'x5'='x1'+'x3'。
到目前为止我所拥有的是
def randMerge(l:list, count:int) -> list:
return l + [random.sample(l,k=count)]
def flatten(d):
return [i for b in [[c] if not isinstance(c, list) else flatten(c)
for c in d] for i in b]
num = 2
aList = ['x1','x2','x3','x4']
res = []
newList = aList[:]
for _ in range(3):
newList = randMerge(newList,num)
print(newList)
的输出为:
#['x1', 'x2', 'x3', 'x4', ['x2', 'x3']]
#['x1', 'x2', 'x3', 'x4', ['x2', 'x3'], ['x2', 'x4']]
#['x1', 'x2', 'x3', 'x4', ['x2', 'x3'], ['x2', 'x4'], ['x3', 'x1']]
正如您所看到的,每个步骤都添加了一个新的子列表,如何用新名称和新的适当重量替换它们?
答案 0 :(得分:0)
对于权重,您可以为列表中的每个元素使用元组: (名称,重量)
aList = [('x1',1),('x2',1),('x3',1),('x4',1)]
现在您可以访问“x3”的权重,如:
print(aList[2][1]) # --> 1
然后你可以这样做:
def randMerge(l:list, count:int, name) -> list:
tmp = random.sample(l,k=count)
sum = 0
for x in tmp:
sum += x[1]
l.append((name,sum))
return l
或使用动态名称:
def randMerge(l:list, count:int) -> list:
tmp = random.sample(l,k=count)
sum = 0
for x in tmp:
sum += x[1]
l.append(("x"+str(len(l)+1),sum))
return l