python打印太多行,我只想要一个

时间:2015-02-22 19:42:07

标签: 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}
{'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}

我的代码显然运行缓慢。如何加快速度,如何避免不需要的输出?

3 个答案:

答案 0 :(得分:2)

将你的print copies置于循环之外并在开始循环之前启动它。

   copies = {}
   for item in listoflists[1:]:
        key = getid(item[id_col])
        copies[key] = copies.get(key, 0) + 1
   print copies

答案 1 :(得分:0)

只需删除最后一行的缩进。在'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

答案 2 :(得分:0)

发现它!对不起,我应该发布我的所有代码。问题出在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
这一切都开始起作用了。