2017-01-14 10 views
0

リストの作成に問題があります。Pythonで多重度のあるアイテムのリストを作成

私は多項式の根を返す関数を持っています(下記参照)。私が得たものは、根(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) 
+2

あなたは 'もしかして[-2、-2、-1、-3、-3、-3]'? – ooknosi

+0

'R'はどんなタイプですか?つまり、 'type(R)'とは何ですか?あなたはPython 2またはPython 3を使用していますか? –

+0

はい、 '[-2、-2、-1、-3、-3、-3]'、私はそれを訂正しました。私はPython 2.7を使用しています – NS1

答えて

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 

EDIT:関数内で処理されたポーリは、あなたはそれにポリを伝えたいと思っているからです。

EDIT:コードの説明が追加されました。

+1

これはありがとう、これは私が必要なものです! – NS1

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) 
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] 
0
items = [(-2, 2), (-1, 1), (-3, 3)] 
result = [] 
for val, mult in items: 
    result.extend(mult * [val]) 
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

関連する問題