我有下面的程序,已经运行了大约两个小时,可能还有1/4要去。我的问题如下:
import csv
input_csv = "LOCATION_ID.csv"
input2 = "CITIES.csv"
output_csv = "OUTPUT_CITIES.csv"
with open(input_csv, "rb") as infile:
input_fields = ("ID", "CITY_DECODED", "CITY", "STATE", "COUNTRY", "SPELL1", "SPELL2", "SPELL3")
reader = csv.DictReader(infile, fieldnames = input_fields)
with open(input2, "rb") as infile2:
input_fields2 = ("Latitude", "Longitude", "City")
reader2 = csv.DictReader(infile2, fieldnames = input_fields2)
next(reader2)
words = []
for next_row in reader2:
words.append(next_row["City"])
with open(output_csv, "wb") as outfile:
output_fields = ("EXISTS","ID", "CITY_DECODED", "CITY", "STATE", "COUNTRY", "SPELL1", "SPELL2", "SPELL3")
writer = csv.DictWriter(outfile, fieldnames = output_fields)
writer.writerow(dict((h,h) for h in output_fields))
next(reader)
for next_row in reader:
search_term = next_row["CITY_DECODED"]
#I think the problem is here where I run through every city
#in "words", even though all I want to know is if the city
#in "search_term" exists in "words
for item in words:
if search_term in words:
next_row["EXISTS"] = 1
writer.writerow(next_row)
我有几个问题:
1既然input\u csv有14k行,input2只有6k行,为什么要花这么长时间?我知道最内部的for循环(以“for item in words:”开头)效率很低(见qtn 3),但我希望对幕后发生的事情有更多的直观/形象,这样我(希望其他so用户)就可以避免在我们的其他程序上犯同样的错误。你知道吗
2如果我想继续运行此代码,这与我离开计算机并进入睡眠/休眠状态有什么关系?程序是否会在该点停止,但在计算机再次使用时自动重新启动?我真的很想知道,一旦运行了一个程序,编译器是如何与操作系统交互的,当计算机与python程序相关时,“进入睡眠”意味着什么。你知道吗
和3此代码的更有效实现是什么?我认为这样做不会超过几分钟,对吧?你知道吗
非常感谢!你知道吗
让我们从我看到的一个低效点开始:
这是外
for
循环的14k次迭代。然后,在嵌套的for
循环中,每次大约有6k次迭代。然后在执行if search_term in words
时执行更多的迭代,因为它会迭代单词直到返回。你知道吗我没有过多考虑这个算法实际上在做什么,但至少应该删除
words
(即words = list(set(words))
)中的重复项。你知道吗我正要发布关于那个
for item in words
小循环的帖子。你为什么这么做让我很困惑,因为items
从未使用过,所以for循环是一个很大的时间浪费。你知道吗很可能可以简化为:
那么,让我们总结一下您的所有迭代:
~6k代表
for next_row in reader2: words.append(next_row["City"])
~14k次迭代
for next_row in reader:
乘以总和(i,16000),约为2520亿次。你知道吗去掉这个无关的循环可以得到大约8400万次迭代,这是。。好吧,好多了。你知道吗
相关问题 更多 >
编程相关推荐