python打印的行太多,我只需要一行
我相信这个问题在这里已经讨论过很多次了,我只是找不到合适的词语来找到与这个问题相关的问题 这是我的密码python打印的行太多,我只需要一行,python,Python,我相信这个问题在这里已经讨论过很多次了,我只是找不到合适的词语来找到与这个问题相关的问题 这是我的密码 def getcopies(listoflists, id_col): for item in listoflists[1:]: key = getid(item[id_col]) copies[key] = copies.get(key, 0) + 1 print copies 这是我的输出 {'20301001': 1} {'203
def getcopies(listoflists, id_col):
for item in listoflists[1:]:
key = getid(item[id_col])
copies[key] = copies.get(key, 0) + 1
print copies
这是我的输出
{'20301001': 1}
{'20301001': 1, '20300001': 1}
{'20301001': 1, '20300001': 1, '20303001': 1}
{'20302001': 1, '20301001': 1, '20300001': 1, '20303001': 1}
这就是我想要的输出
{'20302001': 1, '20301001': 1, '20300001': 1, '20303001': 1}
我的代码显然运行缓慢。如何加快速度,如何避免不需要的输出?将打印副本放在循环外部,并在开始循环之前初始化它
copies = {}
for item in listoflists[1:]:
key = getid(item[id_col])
copies[key] = copies.get(key, 0) + 1
print copies
只需去掉最后一行上的压痕。在“for item”下面缩进的所有内容都将执行x次,其中x是任意项目中的元素数
def getcopies(listoflists, id_col):
for item in listoflists[1:]:
key = getid(item[id_col])
copies[key] = copies.get(key, 0) + 1
print copies
找到了!对不起,我应该把我所有的代码都贴出来。问题在于getid。我是这样定义的:
def getid(rough_id):
if len(rough_id)>=8:
i = 0
while i <= len(rough_id) - 8:
if rough_id[i:i+8].isdigit():
id = rough_id[i:i+8]
break
else:
i += 1
else:
print "rough_id is too short"
return id
一旦我将其更改为:
def getid(rough_id):
id = "id_unknown" #!!!
if len(rough_id)>=8:
i = 0
while i <= len(rough_id) - 8:
if rough_id[i:i+8].isdigit():
id = rough_id[i:i+8]
break
else:
i += 1
else:
print "rough_id is too short"
return id
一切都开始起作用。只需将打印从循环中移出即可@HasanRamezani不仅仅是移动,在开始循环之前,您还需要先初始化dict。他希望打印不返回,而且,如果您尝试返回副本,您将得到未定义的副本。@Aurora谢谢,我知道它应该工作,但它不工作。如果我把打印放在循环之外,我会得到一本空字典。你事先声明了“副本”吗?是的。如果我没有,我会得到一个错误,不是吗?@TeikoAbe那么你的代码没有到达你的循环代码。这是一个冗长的说法,我忘记了设置默认值。但这并不是问题的答案。