为什么要指定索引范围以便在Python中编写while循环列表?

为什么要指定索引范围以便在Python中编写while循环列表?,python,file,loops,indexing,while-loop,Python,File,Loops,Indexing,While Loop,任务是只打印每个城市的最高温度(例如:北京,30.9) 我解决这个问题的第一次尝试是简单地将while循环编写为“while city\u temp:”。我仍然不太明白为什么我需要为while循环指定索引,以避免出现“索引外”错误。为什么我需要写“而城市温度[0]:”?我认为while循环一旦到达列表的末尾就会自然结束…:(希望并感谢您的帮助,谢谢!因为它在循环的末尾总是有一个'元素,所以拆分后,列表中不会有第三个(第二个元素)(这就是导致错误的原因),只有一个元素,即['] 因此,您必须执行[

任务是只打印每个城市的最高温度(例如:北京,30.9)


我解决这个问题的第一次尝试是简单地将while循环编写为“
while city\u temp:
”。我仍然不太明白为什么我需要为while循环指定索引,以避免出现“索引外”错误。为什么我需要写“
而城市温度[0]:
”?我认为while循环一旦到达列表的末尾就会自然结束…:(希望并感谢您的帮助,谢谢!

因为它在循环的末尾总是有一个
'
元素,所以拆分后,列表中不会有第三个(第二个元素)(这就是导致错误的原因),只有一个元素,即
[']

因此,您必须执行
[0]
检查第一个(第零个)元素是否为条件,如果它为空,基本上如果它为空,
bool(city_temp)
将为
False
,然后退出循环

请注意,
['']
仍然是
True
,因为它包含一个元素

更好的代码,仅适用于python 3:

mean_temp.txt = 
city,country,month ave: highest high,month ave: lowest low
    Beijing,China,30.9,-8.4
    Cairo,Egypt,34.7,1.2
    London,UK,23.5,2.1
    Nairobi,Kenya,26.3,10.5
    New York City,USA,28.9,-2.8
    Sydney,Australia,26.5,8.7
    Tokyo,Japan,30.8,0.9

mean_temp = open('mean_temp.txt', 'r')
city_temp = mean_temp.readline().split(",") 

while city_temp[0]: 
    print(city_temp[0], city_temp[2]) 
    city_temp = mean_temp.readline().split(",")

mean_temp.close()

除非在代码顶部从uu future uuu导入print u函数编写
,否则它将工作

,因为当您到达文件末尾时,
mean_temp.readline()
将返回空字符串,
'
。当您对空字符串调用split时:

with open('mean_temp.txt', 'r') as f:
   for i in f:
      print(' '.join(i.split(',')[::3]),end='')
print()
它返回一个包含空字符串的列表,这是真实的

但是,您根本不应该使用while循环。相反,请使用for循环:

>>> bool(''.split(','))
True

这使得
while
循环在到达文件末尾时结束,
readline()
将返回
'
,并通过
拆分(',')拆分为
['']
,此时索引
0
'
,计算结果为
False
,因此
while
循环将结束

如果希望循环在文件末尾更“自然”地结束,建议将文件对象用作迭代器,以便您可以使用
for
循环在其上进行迭代:

for line in mean_temp:
    # do stuff with line...

您使用的
[0]
不是文件中行的索引,而是元组中第一个元素的索引,该元素是通过在逗号上拆分一行而获得的。检查该元素的原因是为了识别何时没有更多行

更简单、更惯用的方法如下:

with open('mean_temp.txt', 'r') as mean_temp:
    for line in mean_temp:
        city, _, temp = line.split(',')
        print(city, temp)

非常感谢你的解释!非常感谢:)非常感谢你的解释!非常感谢:)这帮了大忙。非常感谢你的解释!真的很感激:)我也会用for循环试试,非常感谢你的解释!非常感谢:)
with open('mean_temp.txt', 'r') as mean_temp:
    for line in mean_temp:
        city, _, temp = line.split(',')
        print(city, temp)
with open('file.csv') as csvDataFile:
    csvReader = csv.reader(csvDataFile)
    for row in csvReader:
        # do something with row