【问题标题】:Processing strings in a loop循环处理字符串
【发布时间】:2012-04-03 04:59:43
【问题描述】:

我正在尝试编写一个函数,它接受两个字符串参数并返回第一个字符串中的字符在第二个字符串中出现的次数。

我是 python 的完全初学者并且被难住了。如果有人能指出我正确的方向,那就太好了。我已经得到了这个开始:

def occurrences(text1, text2):
    """Return the number of times characters from text1 occur in text2

    occurrences(string, string) -> int
    """
    #Your code goes here

如您所见,需要 2 个字符串。我认为字符串 1 和字符串 2 就足够了,但我不知道如何定义它们。

到目前为止,我已经开始这样做了,但我什至没有任何成功。

for c in "string":
    print c
    if c == char c in "string2":
        count += 1

我只是在输入随机变量,因为我想如何在我什至不知道的字符串中找到 char(A-Z)?

编辑:你们告诉我的一些技巧我还没有学会。对于这个问题,我应该使用:

  • for 循环
  • in

也给了我一些提示:

提示 1:您可能会发现 in 对于测试一个字符串是否在另一个字符串中很有用。

提示 2:查看第二个参数中的每个字符,看看它是否在第一个参数中。

【问题讨论】:

  • 这是一个很好的问题,因为你解释了你的问题,你展示了你到目前为止所做的事情,解释了你为什么/如何被困,并将其标记为家庭作业。

标签: python string methods


【解决方案1】:

让我们从这里开始并进行一些讨论:

如您所见,需要 2 个字符串。我认为字符串 1 和字符串 2 就足够了,但我不知道如何定义它们。

它们是为您提供的:它们称为text1text2。它们来自调用函数的代码。是否在某个时候向您解释过功能?用您自己的话来说,函数是如何工作的?调用occurrences 的代码会是什么样子?

(最后一部分的提示:你的作业表上有一个例子。)

下一步:

if c == char c in "string2":

你认为这意味着什么?特别是,您认为char 是什么意思? (你之前学过 Python 以外的编程语言吗?)

【讨论】:

  • 不,我以前没有学过其他编程语言。我在高中时做过一些 HTML,但它非常基础。有了这个,我试图解释:如果 c 属于字符串 2 中的一个字符。我想我把 c 放在那里 for c = c in string 2
  • @AnthonyDo 你读过其他答案了吗?他们解释了如何做到这一点,以及如何避免遍历整个 a-z 范围。
  • 拜托,我试图在这里指导您的理解。为此,我必须首先评估你所知道的。为此,我需要您回答问题,而不是跳过并重新询问您的问题。
  • “调用”一个函数是如何使用它的。如果您根本没有向您解释函数,那么考虑到您应该编写一个函数,那么就会出现一些非常错误的情况。在我们继续之前,请查阅您的参考资料,或尝试谷歌(例如what is a function in pythonhow do functions work in python 等)或维基百科。 occurrences 是您正在定义的函数(def 是“define”的缩写)。要测试代码,您需要调用该函数,因此您需要知道它的样子。 --- 暂时不要介意@RikPoggi 的回答。一步一步来。
  • @AnthonyDo: (1) stackoverflow 有自己的chat,不鼓励外部聊天。 (2) 如果我的回答中有不清楚的地方,你可以在那里问。 (3​​)必须玩弄这些东西来学习它们,否则它们就会变得晦涩难懂。无论如何,我已经更新了我的答案,希望能更清楚。
【解决方案2】:

您必须将代码放入函数中并使用函数具有的参数。这应该可以帮助您弄清楚它是如何工作的:

def occurrences(text1, text2):
    """Return the number of times characters from text1 occur in text2

    occurrences(string, string) -> int
    """
    # loop through the string in the variable `text1`
    for c in text1: 
        print c 
        # see if its in `text2`
        if c in text2: 
            pass # you do the rest ;)

# calls the function with 'fooled' -> text1 and 'hello world' -> text2
print occurrences('fooled', 'hello world')

【讨论】:

    【解决方案3】:

    因为这听起来像是家庭作业,所以我只想给你一些关于你需要做什么的指示:

    1. 找出text1 字符串中有哪些字符。关键是您不会对同一个字符进行两次交互。
      set() 可以帮助您:

      >>> set('fooled')
      set(['d', 'e', 'l', 'o', 'f'])
      

      试着和他们玩一会儿。

    2. 迭代来自text1 的(不同的)字符集。你可以使用.count():

      >>> 'hello world'.count('e')
      1
      >>> 'hello world'.count('o')
      2
      

      这可以计算一个字符在字符串中出现的次数,您需要对所有这些值求和并返回该总和。

    注意:有很多方法可以满足您的要求,这只是其中一种(并不是性能最好的一种)。如果您四处寻找“计数字符串出现”或类似的东西,您可以找到其他有趣的解决方案:)


    另一种方法是从text2开始:

    1. 使用 for 循环对 text2 进行迭代
    2. 如果找到来自 text2 的字符 in text1,则将总和加一。

    更新:你试过和他们一起玩吗?

    检查两者之间的区别:

    >>> word = 'fooled'
    >>> for c in word:
    ...     print(c)
    

    和:

    >>> word = 'fooled'
    >>> for c in set(word):
    ...     print(c)
    

    在 for 循环内调用 text2.count(c) 应该不难。

    如果这仍然是"doens't make much sense",那么我建议阅读一个好的Python Tutorial 并稍后再回来。

    【讨论】:

      【解决方案4】:

      所以,你知道如何遍历字符串中的字符了:很好。

      你没有做任何可以计算它们的事情。您需要一组计数器来跟踪字符串中的每个字符。实现此目的的一种方法是使用dictcollections.defaultdictcollections 中的另一个类。

      使用文档,卢克。

      额外提示:使用适当的数据结构和列表推导(google it!),可以在 O(m+n) 时间内(以可读方式)在一行中完成此操作。

      【讨论】:

        【解决方案5】:

        对于 python 2.7 及更高版本:

        [Solution in previous version of question]

        【讨论】:

        • 不要为学生做作业。此外,这个版本不是最理想的。
        猜你喜欢
        • 1970-01-01
        • 2015-06-02
        • 2021-05-27
        • 1970-01-01
        • 1970-01-01
        • 2021-03-02
        • 1970-01-01
        • 1970-01-01
        • 2017-11-14
        相关资源
        最近更新 更多