1

私は、Python はかなり得意だと思っていましたが、この問題に悩まされていました。

次のコードが機能します

import csv
f = open("potholes.csv")
count = 0
for row in csv.DictReader(f):
    addr_bits = row['STREET ADDRESS'].split()

    street_num = addr_bits[0:1]
    count += 1
print type(addr_bits)
print addr_bits
print street_num
print "completed processing " + str(count) + " records"

出力:

<type 'list'>
['2519', 'S', 'HALSTED', 'ST']
['2519']
completed processing 378033 records

ただし、このコードではエラーが発生します

import csv
f = open("potholes.csv")
count = 0
for row in csv.DictReader(f):
    addr_bits = row['STREET ADDRESS'].split()

    street_num = addr_bits[0]
    count += 1
print type(addr_bits)
print addr_bits
print street_num
print "completed processing " + str(count) + " records"

出力:

Traceback (most recent call last):
  File "/home/linux/PycharmProjects/potholes/potholes", line 7, in <module>
    street_num = addr_bits[0]
IndexError: list index out of range

Process finished with exit code 1

唯一の違いは、最初のコードが [0:1] を使用してこのリストにアクセスしたことです。

4

1 に答える 1

4

これは、row['STREET ADDRESS'] が空row['STREET ADDRESS'].split()の場合に空のリストが返されることがあるためです。

スライスを使用して空のリストにアクセスできますが、インデックス固有の要素にはアクセスできません。

以下に例を示します。

In [10]: x = []

In [11]: x[0:1] # this returns empty list
Out[11]: []

In [12]: x[0] # this will raise an error
于 2015-09-26T14:16:31.363 に答える