2017-01-14 5 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'? I.e., что такое '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: Обработанные Poli внутри функции так как вы, кажется, хотите передать поли.

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]) 
Смежные вопросы