2014-05-10 4 views
0

Как сделать несколько списков, как это:Изменение списка в Python

['The Lord of the Rings: The Fellowship of the Ring (2001)'] 

['The Lord of the Rings: The Two Towers (2002)'] 

['"5 Second Movies" (2007) {The Lord of the Rings and the Two Towers (#1.63)}'] 

В один список, как это:

['The Lord of the Rings: The Fellowship of the Ring (2001)', 
'The Lord of the Rings: The Two Towers (2002)', 
'"5 Second Movies" (2007) {The Lord of the Rings and the Two Towers (#1.63)}'] 

Я попытался это:

x = open("ratings.list.txt","r") 
movread = x.readlines() 
x.close() 



#s = raw_input('Search: ').lower() 
for ns in movread: 


    if 'the lord of the' in ns.lower(): 
     d = re.split('\s+',ns,4) 
     Title = d[4].rstrip() 
     Rating= d[3] 



     lists = [Title] 

     combined = [item for sublist in lists for item in sublist] 
     print combined 

Но его дает меня этот выход:

['T', 'h', 'e', ' ', 'L', 'o', 'r', 'd', ' ', 'o', 'f', ' ', 't', 'h', 'e', ' ', 'R', 'i', 'n', 'g', 's', ':', ' ', 'T', 'h', 'e', ' ', 'R', 'e', 't', 'u', 'r', 'n', ' ', 'o', 'f', ' ', 't', 'h', 'e', ' ', 'K', 'i', 'n', 'g', ' ', '(', '2', '0', '0', '3', ')'] 
['T', 'h', 'e', ' ', 'L', 'o', 'r', 'd', ' ', 'o', 'f', ' ', 't', 'h', 'e', ' ', 'R', 'i', 'n', 'g', 's', ':', ' ', 'T', 'h', 'e', ' ', 'F', 'e', 'l', 'l', 'o', 'w', 's', 'h', 'i', 'p', ' ', 'o', 'f', ' ', 't', 'h', 'e', ' ', 'R', 'i', 'n', 'g', ' ', '(', '2', '0', '0', '1', ')'] 

Спасибо за помощь, ребята: D

UPDATE

Файл выглядеть следующим образом (его список всех фильмов на IMDB, поэтому размер огромен):

New Distribution Votes Rank Title 
     0000000125 1196672 9.2 The Shawshank Redemption (1994) 
     0000000125 829707 9.2 The Godfather (1972) 
     0000000124 547511 9.0 The Godfather: Part II (1974) 
     0000000124 1160800 8.9 The Dark Knight (2008) 
     0000000124 920221 8.9 Pulp Fiction (1994) 
     0000000124 358790 8.9 Il buono, il brutto, il cattivo. (1966) 
     000000.9 Schindler's List (1993) 
     0000000133 297241 8.9 12 Angry Men (1957) 
     0000000124 854409 8.9 The Lord of the Rings: The Return of the King (2003) 
     000000.8 Fight Club (1999) 
     0000000124 880827 8.8 The Lord of the Rings: The Fellowship of the Ring (2001) 
     000000.8 Star Wars: Episode V - The Empire Strikes Back (1980) 
     0000000124 953140 8.7 Inception (2010) 
+0

Как насчет только '[sub [0] для sub в оригинале]'? –

+0

Предлагаю вам прочитать файл и разбить его по символам. –

+0

Как это сделать? im не хорошо на python только начал с этого! @ Stupid.Fat.Cat –

ответ

0

Вы хотите

[movie[0] for movie in movies] 

пример сценария будет выглядеть следующим образом

import pprint  

movies = [ 
['The Lord of the Rings: The Fellowship of the Ring (2001)'], 
['The Lord of the Rings: The Two Towers (2002)'], 
['"5 Second Movies" (2007) {The Lord of the Rings and the Two Towers (#1.63)}'], 
] 

pprint.pprint([movie[0] for movie in movies], indent=4) 

Это выводит

[ 'The Lord of the Rings: The Fellowship of the Ring (2001)', 
    'The Lord of the Rings: The Two Towers (2002)', 
    '"5 Second Movies" (2007) {The Lord of the Rings and the Two Towers (#1.63)}'] 

movies список, будет заполняться вами, когда вы читаете в файле.

+0

моя проблема в том, что его огромный файл с большим количеством списков, чем три я показал вам! –

+0

списки не разделяются запятой –

+0

Прочтите файл за строкой, добавив каждую строку в список фильмов. Затем они будут разделены запятыми – Andy

0

Читая их как строки из текстового файла, вы можете сделать следующее:

Похоже, что вы хотите, чтобы иметь возможность искать названия, так что в этом случае:

search = raw_input("Enter title: ").lower() 

with open("ratings.list.txt") as f: 
    titles = [line for line in f if search in line.lower()] 

Этот код вернет вам целую линию. То, что вы делаете с линией, зависит от вас.

Например, чтобы извлечь название + год от линии, вы можете сделать:

for title in titles: 
    print title.strip().split(' ', 6) 

пример:

Если линия:

 0000000125 1196672 9.2 The Shawshank Redemption (1994) 

выход будет :

['0000000125', '', '1196672', '', '', '9.2', ' The Shawshank Redemption (1994)'] 
+0

Моя проблема в том, что его огромный файл с более списками, чем три я показал вам! –

+0

Значит, в этом файле больше, чем просто фильмов? – Totem

+0

Если этот файл содержит только заголовки фильмов, по одному на каждой строке, то код выше для открытия текстового файла должен делать трюк – Totem

0

Похоже, что ваша фактическая проблема гораздо больше связана с вопросом о добавлении списков. Вы можете рассмотреть базу данных для результатов.

Но относительно Вашего первоначального вопроса:

Если вы просто пытаетесь свернуть список списков в список строк, есть хороший трюк, чтобы использовать sum:

>>> listoflists = [['abc'],['def'],['g'],['abc'],['abcdefg']] 
>>> sum(listoflists,[]) 
['abc', 'def', 'g', 'abc', 'abcdefg'] 

Вы могли бы также использовать список понимание, что было на самом деле быстрее в моем тесте:

combined = [ x[0] for x in listoflists ] 

но самый быстрый способ, если элементы списка элементов, можно было бы добавить их т о combined, как вы создаете его вместо того, чтобы требовать отдельного цикла в конце:

#Outside the loop 
combined = [] 

# inside the loop 
title = d[4].rstrip() 
lists = [title] 
combined += lists 

Там, кажется, нет никаких причин, чтобы сделать этот промежуточный Lists переменная, хотя, и вместо того, чтобы просто использовать:

title = d[4].rstrip() 
combined.append(title) 

Вероятно, вы захотите переместить print combined вне цикла, чтобы он просто распечатывал его в конце.

Смежные вопросы