在Python中创建具有多重性的项列表

时间:2017-01-14 23:38:36

标签: python list tuples

我在创建列表时遇到了问题。

我有一个返回多项式根的函数(见下文)。我获得的是一个根列表(R.keys())以及每个根在解决方案中出现的时间(R.values())。

当我获得R.items()时,我会得到一组根和它们的多重性:[(-2, 2), (-1, 1), (-3, 3)],如下例所示。

但我想要的是获得一个列表,其中每个根重复出现的次数,即[-2, -2, -1, -3, -3, -3]

我想这并不难,但我一直在寻找解决方案。

pol=Lambda((y), y**6 + 14*y**5 + 80*y**4 + 238*y**3 + 387*y**2 + 324*y + 108)
poli=Poly(pol(y))
R=roots(poli)
R.keys()
R.values()
R.items()

def list_of_roots(poli):
    return(R.items())
list_of_roots(poli)

5 个答案:

答案 0 :(得分:0)

如果您能够以Array<Tuple>的形式获取商品列表,那么您可以像这样创建list

items = [(-2, 2), (-1, 1), (-3, 3)]
listOfRoots = []
for x in items:
    for y in range(x[1]):
        listOfRoots.append(x[0])
print(listOfRoots)

答案 1 :(得分:0)

roots = [(-2, 2), (-1, 1), (-3, 3)]
[ r for (root, mult) in roots for r in [root] * mult]

[-2, -2, -1, -3, -3, -3]

答案 2 :(得分:0)

def get_list_of_roots(poli):
    # initialize an empty list 
    list_of_roots = []
    # process your poli object to get roots
    R = roots(poli)
    # we obtain the key value pairs using R.items()
    for root, multiplicity in R.items():
        # extend the list_of_roots with each root by multiplicity amount
        list_of_roots += [root] * multiplicity
    return list_of_roots

编辑:在函数内处理poli,因为你似乎想要将poli传递给它。

编辑:添加了代码说明。

答案 3 :(得分:0)

items = [(-2, 2), (-1, 1), (-3, 3)]
result = []
for val, mult in items:
  result.extend(mult * [val])

答案 4 :(得分:0)

我假设你的意思是[-2,-2,-1,-3,-3,-3]。

roots1 = [(-2, 2), (-1, 1), (-3, 3)]
roots2 = [i for (r, m) in roots1 for i in [r] * m]

这可能是有趣的:Making a flat list out of list of lists in Python