【问题标题】:How should I apply this function to the strings of a list given this situation?在这种情况下,我应该如何将此函数应用于列表的字符串?
【发布时间】:2017-03-07 18:55:54
【问题描述】:

如何将上述函数应用于此列表的每个字符串?:

lis = ['hi how are you',
 'pretty good',
 'the quick brown fox',
 'the is quick brown fox play',
 'play the quick brown fox']

我尝试过:

[ request(x) for x in lis ]

我也尝试过映射列表的元素,但没有成功。

【问题讨论】:

标签: python python-3.x data-structures request list-comprehension


【解决方案1】:

我认为问题出在您的全局变量 lis_ 上。您可以通过所有 lis 条目来操作它。您返回您理解的 每个 元素的列表引用,但在以后的解析中继续更新列表。

你得到的是一个相同指针的列表(每个都是对lis_的引用),每个指针都包含所有的处理。

要解决此问题,请使用适当的封装编程实践。使用局部变量,在每次调用时清理它们,并只返回调用程序所需的值。

这会让你感动吗?

【讨论】:

  • 当我做request('hi how are you') 我得到:[('hi', 'hi', 'LN-'), ('how', 'how', 'ERMPN7'), ('are', 'be', 'VI-P1PSA-N-N9'), ('you', 'you', 'PP-S2AN8')],我认为问题是请求。
  • 您能否展示如何:“使用适当的封装编程实践。使用局部变量,在每次调用时清理它们,并仅返回调用程序所需的值。”鉴于这种情况?...
  • @J.Do:不,我不能。模块化编程是一个概念,而不是一个简单的例子。将其应用于您现在已删除的代码将需要进行重大重写。其中一部分是函数和调用程序之间的所有通信都是通过调用本身发生的:调用参数和返回值。不使用全局变量,不产生隐藏的副作用。
【解决方案2】:

你的列表理解很好,你得到奇怪输出的原因看起来是请求函数总是返回对全局变量 lis_ 的引用,你一直在向它附加东西。您应该在 convert() 中创建 lis_ 作为局部变量。

【讨论】:

    【解决方案3】:

    这会有帮助吗?

    lis = ['hi how are you',
           'pretty good',
           'the quick brown fox',
           'the is quick brown fox play',
           'play the quick brown fox']
    
    
    def requ(text):
        # This mimics the request
        output = []
        for word in text.split():
            # This just mimics getting some ID for each word
            xyz = "".join(str([ord(x) for x in word])).replace(", ", "")
            # This mimics the word root part
            if word in ["are", "is"]:
                output.append((word, "be", xyz))
            else:
                output.append((word, word, xyz))
        return output
    
    
    new_lis = [requ(w) for w in lis]
    
    print(new_lis)
    

    输出:

    [[('hi', 'hi', '[104105]'), ('how', 'how', '[104111119]'), ('are', 'be', '[97114101]'), ('you', 'you', '[121111117]')], [('pretty', 'pretty', '[112114101116116121]'), ('good', 'good', '[103111111100]')], [('the', 'the', '[116104101]'), ('quick', 'quick', '[11311710599107]'), ('brown', 'brown', '[98114111119110]'), ('fox', 'fox', '[102111120]')], [('the', 'the', '[116104101]'), ('is', 'be', '[105115]'), ('quick', 'quick', '[11311710599107]'), ('brown', 'brown', '[98114111119110]'), ('fox', 'fox', '[102111120]'), ('play', 'play', '[11210897121]')], [('play', 'play', '[11210897121]'), ('the', 'the', '[116104101]'), ('quick', 'quick', '[11311710599107]'), ('brown', 'brown', '[98114111119110]'), ('fox', 'fox', '[102111120]')]]
    

    【讨论】:

    • 一秒钟,我看到你正在为每个字符串(句子)发出请求。
    • 我猜是api请求...有没有办法在发出另一个请求后清理每个请求?
    • 嗯,这不是最好的解决方案,但您也可以尝试在之后解决问题。
    • 好吧,最后我解决了将所有内容拆分为更多功能...我不明白为什么将上述过程拆分为更多功能。
    • 这就是我和其他发帖人会推荐的,否则你将不得不修复结果,例如比如this,它只是从一开始就正确接近它的糟糕替代品。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-17
    • 2022-07-22
    • 1970-01-01
    • 2020-05-07
    • 2012-12-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多