2015-12-10 2 views
2

Как мне вернуть свой список, чтобы список состоял из строк, а не списков?Изменение списков внутри списка по строкам внутри списка

Вот моя попытка:

def recipe(listofingredients): 
    listofingredients = listofingredients 
    newlist = [] 
    newlist2 = [] 

    for i in listofingredients: 
     listofingredients = i.strip("\n") 
     newlist.append(listofingredients) 

    for i in newlist: 
     newlist = i.split() 
     newlist2.append(newlist) 
    return newlist2 

result = recipe(['12345\n','eggs 4\n','$0.50\n','flour 5\n','$2.00\n']) 
print result 

И мой выход таков:

[['12345'], ['eggs', '4'], ['$0.50'], ['flour', '5'], ['$2.00']] 

Желаемый результат:

['12345', 'eggs', '4', '$0.50', 'flour', '5', '$2.00'] 

Я знаю, что моя проблема здесь заключается в добавлении одного списка в другой, но я не уверен, как использовать .strip() и .split() для чего-либо, кроме списка.

+0

Theres много Wierd вещей происходит в вашем коде ... но ответить на ваш вопрос, изменение 'newlist2.append (newlist)' to 'newlist2.extend (newlist)' –

+0

Большое вам спасибо! –

ответ

1

Использование extend и split:

>>> L = ['12345\n','eggs 4\n','$0.50\n','flour 5\n','$2.00\n'] 
>>> res = [] 
>>> for entry in L: 
     res.extend(entry.split()) 
>>> res 
['12345', 'eggs', '4', '$0.50', 'flour', '5', '$2.00'] 

split расщепляется на белых пространств на по умолчанию. Строки с новой строкой в ​​конце и без пространства внутри превращены в список на один элемент:

>>>'12345\n'.split() 
['12345'] 

Строка с пространством внутри раскола в список из двух элементов:

>>> 'eggs 4\n'.split() 
['eggs', '4'] 

Метод extend() помогает создать список из других списков:

>>> L = [] 
>>> L.extend([1, 2, 3]) 
>>> L 
[1, 2, 3] 
>>> L.extend([4, 5, 6]) 
L 
[1, 2, 3, 4, 5, 6] 
+0

Это не сработало для меня :( Спасибо за предложение! –

+0

Работает на вашем примере данных.;). * не работает совершенно правильно * слишком расплывчато, чтобы улучшить мое решение. ;) –

+0

Я понял, что я сделал не так! Благодаря! –

1

Вы можете использовать путь Питона сделать это. Воспользуйтесь преимуществами метода list comprehension и strip().

recipes = ['12345\n','eggs 4\n','$0.50\n','flour 5\n','$2.00\n'] 
recipes = [recipe.split() for recipe in recipes] 
print sum(recipes, []) 

Теперь результат будет

['12345', 'eggs', '4', '$0.50', 'flour', '5', '$2.00'] 

Для дальнейшего чтения https://stackoverflow.com/a/716482/968442 https://stackoverflow.com/a/716489/968442

+0

Спасибо! Чтение вопросов, которые вы предложили, было очень полезно! –