比较列表和字符串

时间:2013-03-01 15:19:24

标签: python comparison

lettersGuessed是一个字母列表

def isWordGuessed(secretWord, lettersGuessed):
  listA = {'a','b','c','p','o','e','p','l'}
  abc = "apple"

现在如果列表(listA)中猜到的(部分或全部)字母包含在字符串中的所有字母(字符)中,那么它应该返回一个真正的布尔值...

但是每次我这样做时我都会得到一个错误的回报...即使上面的例子应该清楚地返回“true”

那么有什么可以帮助我吗?

Thnx很多!!!

4 个答案:

答案 0 :(得分:4)

你可以做点什么:

abc = 'apple'
setA = {'a','b','c','p','o','e','p','l'}
sabc = set(abc) 
print len(sabc) == len(sabc & setA)

当然,这有点误导。在setA = { 'a','p','l','e' }的情况下,您希望发生什么?这仍然会返回True,因为没有考虑重复项。如果您需要考虑重复项,我建议使用Collections.Counter

from collections import Counter

def compare(word,guesses):
    return Counter(word) <= Counter(guesses)

这是有效的,因为它确保word中字母的数量始终小于猜测中相应字母的数量。

答案 1 :(得分:1)

使用套装:

>>> set('apple')<{'a','b','c','p','o','e','p','l'}
True
>>> set('abc')<{'a','b','c','p','o','e','p','l'}
True

< compares set 1 as being a complete subset of set 2

但是,正如@mgilson所指出的,对于带有重复的字符串,这是不准确的。

按照他的建议使用计数器。

答案 2 :(得分:1)

或者您可以使用any

>>> letters_guessed = 'abc'
>>> letters_in_word = 'abcdefghi'
>>> any(letter for letter in letters_guessed if letter in letters_in_word)
True
>>> letters_guessed = 'zzz'
>>> any(letter for letter in letters_guessed if letter in letters_in_word)
False

答案 3 :(得分:0)

正如有人所说,你的帖子样本不会返回任何内容。这是我想出来的东西,但它没有其他东西那么优雅。

actualWord = "apple"
guessList = ["a","b","c","e","l"]

def WordGuessed(secretWord, lettersGuessed):
    listSW = list(secretWord)
    answer = True
    for item in listSW:
        if item not in lettersGuessed:
            answer = False
            break
    return answer

print WordGuessed(actualWord,guessList)