python无法在variab中存储函数结果

2024-10-02 08:29:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我编写了以下代码来帮助我在一个文件中获取重复行,并列出每个重复行的行号。在

这段代码在函数中不工作时工作。但是当我把代码放在一个函数中,如下所示,它的行为不像我期望的那样。在

我希望“getallDups”函数的值存储在变量数据中。在

#!/usr/bin/env python

filename = '/tmp/test.txt'
f = open(filename, "r")
contentAslist = f.read().splitlines()
def getallDups():
    lc = 0
    mystring = ""
    for eitem in contentAslist:
        lc += 1
        if contentAslist.count(eitem) > 1:
            mystring = lc,eitem
            return(mystring)

data = getallDups()
print data

上面的代码只存储第一个重复的行。它没有列出所有重复的行。在

如何修改此代码以精确地执行我想要的操作?如何修改它以将定义函数的值存储在变量“data”中,然后我可以使用它。在


Tags: 文件数据函数代码envdatabinusr
3条回答

这里的问题是,您返回的是一个循环,这意味着您永远无法获得剩余的数据。只需将return替换为yield,并将检索调用更改为:

data = list(getallDups())

这将允许您的循环完全完成。在

如果你想让它返回更多的结果,它需要计算更多的结果。不是返回它找到的第一个匹配项,而是需要它将结果添加到列表中,然后返回该列表:

contentAslist = [
    "abcd",
    "efgh",
    "abcd",
    "ijk",
    "lmno",
    "ijk",
    "lmno",
    "ijk",
]

def getallDups():
    lc = 0
    result = []
    for eitem in contentAslist:
        lc += 1
        if contentAslist.count(eitem) > 1:
            result.append((lc, eitem))
    return result

data = getallDups()
print data

然而,这是一个非常低效的方法,O(N^2),因为计数列表()方法对于列表中的N个项是O(N),我们调用它N次。在

更好的方法是使用哈希。请注意,这里的返回类型非常不同,但可能更有用,并且可以很容易地转换为原始表单。在

^{pr2}$

上述解为O(N)。在

样本输入:

abcd
efgh
abcd
ijk
lmno
ijk
lmno
ijk

输出:

abcd : 1 3
ijk : 4 6 8
lmno : 5 7

return语句放入函数内的循环中:返回将导致函数在其第一次迭代时结束。。。可能的方法是返回列表(并在循环中收集字符串)或将函数更改为生成器。在

返回列表:

filename = '/tmp/test.txt'
f = open(filename, "r")
contentAslist = f.read().splitlines()
def getallDups():
    mylist = []
    lc = 0
    for eitem in contentAslist:
        lc += 1
        if contentAslist.count(eitem) > 1:
            mylist.append((lc, eitem))      # append the duplicated line to a list
    return mylist                           # return the fully populated list

data = getallDups()
print data

发电机版本:

^{pr2}$

相关问题 更多 >

    热门问题