【问题标题】:Is there any way i can loop through a-z instead of writing multiple for loop stataments?有什么方法可以循环 a-z 而不是编写多个 for 循环语句?
【发布时间】:2021-07-01 11:13:29
【问题描述】:

所以我试图对给定列表进行字符计数。

a = ["farshad", "ghassemi?d", "madam", "?radar?", "duration", "con?tained"]

我的预期输出是:

farshad 包含 2 个 a

这样下去.....

我的代码是:

def charCount():
    a = ["farshad", "ghassemi?d", "madam", "?radar?", "duration", "con?tained"]

    for word in a:
        for letter in word:
            x = word.count("a")
        print(word, "contains", x, "a")

    for word in a:
        for letter in word:
            x = word.count("d")
        print(word, "contains", x, "d")

charCount()

我试图在一个 for 循环中完成这一切,例如 A-Z ....

感谢您的帮助:D

【问题讨论】:

  • 为什么需要内部 for 循环? .count() 已经遍历了单词中的字母。
  • 您想将print 更改为内部for 循环并将其更改为x = word.count(letter)
  • 这里不允许破坏你自己的问题。
  • 请不要通过破坏您的帖子为他人增加工作量。通过在 Stack Exchange (SE) 网络上发帖,您已在 CC BY-SA license 下授予 SE 分发内容的不可撤销权利(即无论您未来的选择如何)。根据 SE 政策,分发非破坏版本。因此,任何破坏行为都将被撤销。请参阅:How does deleting work? …。如果允许删除,则帖子下方左侧有一个“删除”按钮,但仅在浏览器中,而不是移动应用程序中。

标签: python python-3.x for-loop


【解决方案1】:

您可以在 2 个 for 循环中执行此操作。 (我假设这个问题意味着 1 个单独的 for 循环并允许嵌套 for 循环)我就是这样做的:

import string

def charCount():
    a = ["farshad", "ghassemi?d", "madam", "?radar?", "duration", "con?tained"]

    for word in a:
        for i in string.ascii_lowercase:
            x = word.lower().count(i)
            print(word, "contains", x, i)

charCount()

您需要做的就是遍历每个字符。 string.ascii_lowercase 包含每个小写字母,所以我使用了它。然后,我们得到 word.lower() 中 i 的计数。 word.lower() 将单词转换为小写,使其也可用于大写。

如果你想进一步缩短它,你可以像这样改变内部 for 循环:

def charCount():
    a = ["farshad", "ghassemi?d", "madam", "?radar?", "duration", "con?tained"]

    for word in a:
        for i in string.ascii_lowercase: print(word, "contains", word.lower().count(i), i)

【讨论】:

  • 非常感谢!
  • 不客气!作为stackoverflow的一般规则,如果答案对您有所帮助,请记住接受正确答案并在有帮助的情况下投票。 (这不适用于我的答案,但这里有任何答案。)请访问 stackoverflow.com/help/someone-answers。回答问题有助于改进网站。祝你有美好的一天!
【解决方案2】:

您是否要检查每个单词的整个字母表?还是只是那些词中的字母?

如果您只想计算每个单词中的字母,可以尝试:

def charCount():

    a = ["farshad", "ghassemi?d", "madam", "?radar?", "duration", "con?tained"]

    for word in a:

        word_set = set(word)

        for letter in word_set:
            x = word.count(letter)
            print(word, "contains", x, letter)

这将为每个单词创建一个set,这将防止打印重复的字母。

如果您想忽略这些问号,可以将其放在内部循环中:

            if letter == '?':
                continue

请记住,此解决方案不会以任何特定顺序对您的字母进行排序,因为集合本身就是无序的。

【讨论】:

  • 非常感谢!
【解决方案3】:

我的回答

def charCount(search_letter):
    a = ["farshad", "ghassemi?d", "madam", "?radar?", "duration", "con?tained"]
    for word in a:
        word = word.lower()
        for letter in word:
            x = word.count(search_letter)
            print(word, "contains", x, search_letter)
# letters = ("aeiou")
letters = ("abcdefghijklmnopqrstuvwxyz")    
for search_letter in letters:
    charCount(search_letter)

【讨论】:

  • 如果你的列表中有大写字母,你可以添加 word.lower()。
  • 还有,搜索词“字母”!可以调整为包含您要在单词列表的每个单词中搜索的字母,例如如果您只想搜索 Vowles,那么字母将是“aeiou”
猜你喜欢
  • 1970-01-01
  • 2019-02-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-05
  • 2013-05-11
相关资源
最近更新 更多