Python - 函数返回问题

标签 python return iteration

我使用的 csv (csv_f) 基本上只是单引号、逗号分隔的单词:

'foo','bar','yada', 'foo'
'test'

我正在尝试在另一个文档 (csv_g) 中查找这些内容,如下所示:

1 'foo'
2 'bar'
3 'something'
4 'test'

并使用它来构建格式的稀疏向量

SparseVector(#lines in csv_g, [#s in first column of csv_g], [# of occurences of each in csv_f])

上面的例子看起来像这样:

(4, [1, 2], [2, 1])
(4, [4], [1])

我已经研究了一段时间并尝试了几种不同的方法,但它们都不起作用。我什至还没有尝试处理像上面的“foo”这样的多次出现。我最接近的方法是这样的:

import csv

f = open(r'/path/to/csv_f.txt')
g = open(r'/path/to/csv_g.txt')
csv_f = csv.reader(f)
csv_g = csv.reader(g, delimiter=' ')

def lookup(text):
    for row_g in csv_g:
        if row_g[1] == text:
            return (row_g[0])
            break

for row_f in csv_f:
    positions = []
    counts = []
    size = len(row_f)
    i=0
    for i in range(size):
        fword = row_f[i]
        positions.append(lookup(fword))
        counts.append(1)
    print(positions, counts)

运行它会导致:

[None, None, None, None] [1, 1, 1, 1]
[None] [1]

我很困惑为什么函数返回 None 而不是匹配项。我以为它会击中火柴,归还它,然后退出...

我还尝试了一些没有定义查找函数的嵌套循环(如果有帮助,我可以发布这些尝试,现在我不想弄乱你的屏幕),但这也没有奏效。我认为这可能是因为生成器只能搜索一次,但我不太确定。

任何关于最佳方法的提示,以及返回未按预期工作的原因,将不胜感激。

最佳答案

我按照 Claudiu 和 Padriac 的建议解决了这个问题。更新代码:

import csv

f = open(r'/path/to/csv_f.txt')
g = open(r'/path/to/csv_g.txt')
csv_f = csv.reader(f)
csv_g = csv.reader(g, delimiter=' ')

dict = []

for row_g in csv_g:
    dict.append(row_g)
for row_f in csv_f:
    positions = []
    counts = []
    size = len(row_f)
    i=0
    while i<size:
        fword = row_f[i]
        for line in dict:
            gword = line[1]
            if fword == gword:
                positions.append(line[0])
                counts.append(1)
                break
        i+=1
    print(positions, counts)

我不确定为什么查找功能没有得到匹配,但我很高兴我终于能够得到一些东西!

关于Python - 函数返回问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33059072/

相关文章:

python - python 的注释(例如数据类)可以扩展到它生成的代码中吗?

c++ - 返回局部变量的地址与返回局部变量的指针

定义有效案例的算法/迭代

python - 在 PayPal REST API 中,如何从新执行的账单协议(protocol)中获取付款人信息?

python - py2exe 可执行文件生成日志文件错误

python - 在对 API 的 python 调用中使用正则表达式来清理返回

javascript - 如何在返回之前等待迭代完成

c++ - 在 C 中使用指向对象的指针的方法

c++ - 在 C++ 中返回 int 进行错误检查是不是很糟糕

java - JDBC 嵌套 while 循环