2013-04-25 95 views
0

下面我有兩個列表已從文本文件導入。我需要一種能夠將線路連接在一起的方式。所以說如果line1是隨機打印的,我想要打印line2。將來自兩個獨立列表的兩個項目鏈接在一起。 python

line1 = (file.readline()) 
line2 = (file.readline()) 
line3 = (file.readline()) 
line4 = (file.readline()) 
line5 = (file.readline()) 
line6 = (file.readline()) 
line7 = (file.readline()) 
line8 = (file.readline()) 
line9 = (file.readline()) 
line10 = (file.readline()) 
line11 = (file.readline()) 
line12 = (file.readline()) 
line13 = (file.readline()) 
line14 = (file.readline()) 
line15 = (file.readline()) 
line16 = (file.readline()) 
line17 = (file.readline()) 
line18 = (file.readline()) 
line19 = (file.readline()) 
line20 = (file.readline()) 
line21 = (file.readline()) 
line22 = (file.readline()) 
line23 = (file.readline()) 
line24 = (file.readline()) 
line25 = (file.readline()) 
line26 = (file.readline()) 
line27 = (file.readline()) 
line28 = (file.readline()) 
line29 = (file.readline()) 
line30 = (file.readline()) 

# creates an empty list and fills it with all the definitions from the file 
defi = [] 
defi.append(line2) 
defi.append(line4) 
defi.append(line6) 
defi.append(line8) 
defi.append(line10) 
defi.append(line12) 
defi.append(line14) 
defi.append(line16) 
defi.append(line18) 
defi.append(line20) 
defi.append(line22) 
defi.append(line24) 
defi.append(line26) 
defi.append(line28) 
defi.append(line30) 
randdef = random.choice(defi) #chooses random lines from the list 
randdefi = random.choice(defi) # "  "  "  " " " 

#creates an empty list and fills it with all the keywords from the file 
key = [] 
key.append(line1) 
key.append(line3) 
key.append(line5) 
key.append(line7) 
key.append(line9) 
key.append(line11) 
key.append(line13) 
key.append(line15) 
key.append(line17) 
key.append(line19) 
key.append(line21) 
key.append(line23) 
key.append(line25) 
key.append(line27) 
key.append(line29) 
randkey = random.choice(key) 

但我需要鏈接每個列表中的某些行在一起。所以他們打印在一起

+4

創建三十個變量是一種可怕的方式。使用一個列表。 – 2013-04-25 11:16:21

回答

1

只是讀取整個文件到列表中,然後用切片來把它們分成兩份名單:

with open(filename, 'r') as inputfile: 
    lines = list(inputfile) 

key = lines[::2] # every second line 
defi = lines[1::2] # every second line, starting with the second 

你可以配對起來而是直接從文件,用少許itertools魔術:

from itertools import tee, izip 

def pairwise(iterable): 
    "s -> (s0,s1), (s1,s2), (s2, s3), ..." 
    a, b = tee(iterable) 
    next(b, None) 
    return izip(a, b) 

with open(filename, 'r') as inputfile: 
    key_def_pairs = list(pairwise(inputfile)) 

或者只是把它直接進入詞典:

with open(filename, 'r') as inputfile: 
    key_def_pairs = dict(pairwise(inputfile)) 

但您可能需要先刪除換行符:

from itertools import imap 

with open(filename, 'r') as inputfile: 
    key_def_pairs = dict(pairwise(imap(str.rstrip, inputfile))) 
+0

謝謝你們兩位,這真的很有幫助。這兩個想法都非常好,它會幫助很多。謝謝 – 2013-04-25 11:20:22

+0

@MartijnPieters我建議'dict(成對(imap(str.rstrip,inputfile)))' – jamylak 2013-04-25 11:23:08

+0

我會這樣做只需要幾個minuites讓我這樣做。再次感謝。 – 2013-04-25 11:23:30