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