Python中列表输出有问题

时间:2009-04-13 07:16:49

标签: python list text

我希望Python程序从文本文件中导入单词列表,并将文本文件的内容打印为两个列表。文本文件中的数据位于以下格式:

A Alfa
B Betta
C Charlie

我希望Python程序打印出一个包含A,B,C的列表,以及一个包含Alfa,Betta,Charlie的列表。

这就是我写的:

english2german = open('english2german.txt', 'r')
englist = []
gerlist = []

for i, line in enumerate(english2german):
    englist[i:], gerlist[i:] = line.split()

这是两个列表,但只会打印出每个单词中的第一个字母。 如何让我的代码打印出整个单词?

6 个答案:

答案 0 :(得分:6)

你想要这样的东西:

english2german = open("english2german.txt")
englist = []
gerlist = []

for line in english2german:
    (e, g) = line.split()
    englist.append(e)
    gerlist.append(g)

之前代码的问题是englist[i:]实际上是列表的 slice ,而不仅仅是单个索引。字符串也是可迭代的,因此您基本上将一个字母填充到多个索引中。换句话说,gerlist[0:] = "alfa"之类的内容实际上会产生gerlist = ['a', 'l', 'f', 'a']

答案 1 :(得分:6)

甚至比amo-ej1's answer更短,而且可能更快:

In [1]: english2german = open('english2german.txt')
In [2]: eng, ger = zip(*( line.split() for line in english2german ))
In [3]: eng
Out[3]: ('A', 'B', 'C')
In [4]: ger
Out[4]: ('Alfa', 'Betta', 'Charlie')

如果您使用的是Python 3.0或from future_builtins import zip,那么这也是内存效率的。如果zip非常长,请将izip替换为itertools english2german

答案 2 :(得分:3)

只是一个补充:你正在使用文件。 请关闭它们:)或使用with construct:

with open('english2german.txt') as english2german:
  englist, gerlist = zip(*(line.split() for line in english2german))

答案 3 :(得分:1)

你喜欢这个意思:

english2german = open('k.txt', 'r')
englist = []
gerlist = []

for i, line in enumerate(english2german):
    englist.append(line.split()[0])
    gerlist.append(line.split()[1])

print englist
print gerlist

生成:

['A','B','C'] ['Alfa','Betta','Charlie']

答案 4 :(得分:1)

如果任何单词中没有空格(即每行有一个空格),已发布的解决方案就可以了。如果我理解正确,你正在尝试建立一个字典,所以我建议你考虑一个事实,你也可以有多个单词表达的定义。在这种情况下,您最好使用其他字符而不是空格来将定义与单词分开。像“|”这样的东西,不可能出现在单词中。

然后,你做这样的事情:

for line in english2german:
    (e, g) = line.split("|")
    englist.append(e)
    gerlist.append(g)

答案 5 :(得分:1)

对使用zip()

Autoplectic's建议略有元回答(?)

输入文件中有3行(来自问题中提供的数据):

zip()方法平均0.404729390144秒,与0.341339087486相比,简单的for循环构建两个列表(来自mipadi's当前接受的答案的代码)。

输入文件中有10,000行(随机生成3-12个字符。我将timeit.repeat()值减少到100次,重复两次):

zip() for for循环相比,

1.43965339661平均花费1.52318406105秒。

这两个基准测试都是使用Python 2.5.1版完成的。

几乎没有太大的区别..鉴于循环的简单性是多么可读,我建议使用它。zip代码对于大文件可能会快一点,但差异大约是0.083秒有10,000行..

基准代码:

import timeit

# https://stackoverflow.com/questions/743248/something-wrong-with-output-from-list-in-python/743313#743313
code_zip = """english2german = open('english2german.txt')
eng, ger = zip(*( line.split() for line in english2german ))
"""

# https://stackoverflow.com/questions/743248/something-wrong-with-output-from-list-in-python/743268#743268
code_for = """english2german = open("english2german.txt")
englist = []
gerlist = []

for line in english2german:
    (e, g) = line.split()
    englist.append(e)
    gerlist.append(g)
"""

for code in [code_zip, code_for]:
    t = timeit.Timer(stmt = code)
    try:
        times = t.repeat(10, 10000)
    except:
        t.print_exc()
    else:
        print "Code:"
        print code
        print "Time:"
        print times
        print "Average:"
        print sum(times) / len(times)
        print "-" * 20