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那么你的代码没有到达你的循环代码。这是一个冗长的说法,我忘记了设置默认值。但这并不是问题的答案。