【问题标题】:while loop counter comparing two listswhile循环计数器比较两个列表
【发布时间】:2014-01-08 15:04:45
【问题描述】:

我需要一些帮助。我在下面有两个列表:

sentences = ['The green monkey green age the blue egg','How many yellow green monkey"s are in the green forest']
color =['orange', 'green', 'yellow', 'violet', 'blue']

totals = []

for sent in sentences:
  print sent
  for sent in sentences:
      totals.add((sent, sum(sent.count(col) for col in color))

我的目标是计算颜色元素在句子中任何给定元素中出现的次数。所以我的输出将包含每个句子元素和存在的颜色元素的计数。对此的任何帮助将不胜感激。我是一个初学者,到目前为止很喜欢 python :)

【问题讨论】:

  • 请展示您到目前为止所做的尝试。我们在这里帮助您修复代码并了解您做错了什么,而不是为您做作业。
  • 哈哈,这不是家庭作业。我只是一个好奇的初学者。到目前为止,我可以得到匹配的句子。但我不确定如何包含一个计数器来增加每个句子。请查看我的编辑以了解我到目前为止所做的事情

标签: python list while-loop counter


【解决方案1】:

你可以试试这样的:

print [(s, sum(s.count(c) for c in colors)) for s in sentences]

输出

[('The green monkey age the blue egg', 2), 
 ('How many yellow monkey"s are in the green forest', 2)]

如果你想使用你在问题中列出的代码,有3个错误:

  1. 您只需遍历句子一次。
  2. 您需要将 add 替换为 append。
  3. 您的添加/附加函数末尾缺少括号。

下面的固定代码:

sentences = ['The green monkey green age the blue egg','How many yellow green monkey"s are in the green forest']
color =['orange', 'green', 'yellow', 'violet', 'blue']

totals = []

for sent in sentences:
    totals.append((sent, sum(sent.count(col) for col in color)))

print totals

【讨论】:

  • 哦,我明白了。嗯,有道理。请您帮我解决我编写的脚本中的错误吗?
  • @user3116753 错误是因为 list 没有 add() 方法。 Try.append().
  • 你只附加一个值,一个元组 = (sentence, count)
  • 我会弄清楚的。谢谢。
  • @user3116753 好的,我用你犯的具体错误更新了答案。
【解决方案2】:

使用Counter 可能是最Pythonic(也是最短)的方法,但字符串还带有一个内置的count 方法,您可以使用:

color =['orange', 'green', 'yellow', 'violet', 'blue']
sentences = ['The green monkey age the blue egg', 'How many yellow monkey"s are in the green forest']

for sent in sentences:
  print sent
  for col in color:
    print "", col, sent.count(col)

输出:

The green monkey age the blue egg
 orange 0
 green 1
 yellow 0
 violet 0
 blue 1
How many yellow monkey"s are in the green forest
 orange 0
 green 1
 yellow 1
 violet 0
 blue 0

编辑:

如果您只想要句子中颜色总数旁边的句子,请将最后一个 for 循环替换为 sum 和 list comprehension

for sent in sentences:
  print sent, sum(sent.count(col) for col in color)

【讨论】:

  • 这几乎正是我正在寻找的输出。有没有办法真正得到句子而不是颜色。以及右侧列中的计数。我正在寻找每个句子的总计数你很好!
  • 我不完全确定您在输出中寻找什么。你想在句子中“颜色词”总数旁边打印句子吗(例如("green blue stuff", 2))?
  • 完全是报应!!!!!!!!!!谢谢。那么这会变成字典结构吗?我不会在列表中吧?谢谢你。只是好奇和享受这些东西。
  • 不,我实际上并没有将计数存储在任何地方(只是将其打印到输出)。如果要将其存储在字典中,则需要使用 sent 作为键和 sum(sent.count(col) for col in color) 作为值。要将其存储到名为totals 的列表中,请将文本print 替换为totals.add(((注意两个左括号)并将) 添加到同一行的末尾。这会将包含句子和计数的元组存储到列表中。
  • 但是感谢您让我到达那里。接下来我想对计数进行一些分析。我学到了很多谢谢你们。谢谢
【解决方案3】:

你也可以尝试使用Counter:

color =['orange', 'green', 'yellow', 'violet', 'blue']
sentences = ['The green monkey age the blue egg', 'How many yellow monkey"s are in the green forest']
from collections import Counter

for line in sentences:
    print Counter([word for word in line.split() if word in color])

【讨论】:

  • 哦,我明白了。这样就可以将其放入字典结构中。嗯,好吧,让我玩一下,看看我得到了什么。我又来烦你了。谢谢Artsiom。
【解决方案4】:

最简单的方法是在每个句子中查找每种颜色:

for sentence in sentences:
    count = 0
    for color in colors:
        for word in sentence.split(' '):
            if word == color:
                count + = 1
    print count

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-19
    • 2016-02-12
    • 1970-01-01
    • 1970-01-01
    • 2016-04-02
    • 2015-05-23
    相关资源
    最近更新 更多