2013-04-25 60 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