在列表中替换分配权重

时间:2018-04-11 12:38:33

标签: python python-3.x list numpy set

我的问题有两个部分:首先,假设我们有一个元素列表:

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']]

正如您所看到的,每个步骤都添加了一个新的子列表,如何用新名称和新的适当重量替换它们?

1 个答案:

答案 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