[[], [], [], []]
ファイルの先頭に空の行を追加するだけで、この例が生成されます[[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%
標準に対する改善ですが、これも個人次第です。私は個人的に非常に大きなデータセットを扱っているので、可能な限り最適化しようとしています。