[[], [], [], []]
如果您只是在文件顶部添加一个空行,您的示例就会生成[[1], [2, 3], [4, 5, 6], [7, 8, 9, 10]]
也可以试试这个:
triangle = [ [int(value) for value in line.split(' ') if value.strip()]
for line in open('test.txt') if line.strip()]
列表理解可以比标准循环更快。测试它,它工作,这个代码也可以工作,不管空行,它更安全,假设你所有的条目都是整数。
显然不是每个人都喜欢 LC 所以:
triangle = []
with open('test.txt', 'r') as f:
for index, line in enumerate(f):
if line.strip():
value = []
for number in line.split(' '):
if number.strip():
try:
value.append(int(number))
except Exception as ex:
print 'Failed to convert %s at line %i' % (number, index)
print 'Exception %s' % str(ex)
raise ex
triangle.append(value)
print triangle
生产[[1], [2, 3], [4, 5, 6], [7, 8, 9, 10]]
现在有些人可能喜欢 LC 有些人可能喜欢标准 for 循环,这完全取决于意见/口味,虽然是的,for 循环try ... except ...
更好一些,因为它可以告诉你哪条线失败了,尽管我再次提到只要所有值都是整数,LC就可以了。
$ python -m timeit 'execfile("test.py")'
10000 loops, best of 3: 198 usec per loop
$ python -m timeit 'execfile("test1.py")'
10000 loops, best of 3: 130 usec per loop
所以基本上是35%
改进与标准,再次取决于个人。我个人使用非常大的数据集,因此我尝试尽可能优化它。