为什么我不能得到一个键中元素数的正确长度?

2024-10-02 22:30:03 发布

您现在位置:Python中文网/ 问答频道 /正文

def wordPattern(pattern, str):
    """
    :type pattern: str
    :type str: str
    :rtype: bool
    """
    list_pattern = list()
    list_str = list()
    for letter in pattern:
        list_pattern.append(letter)
    for word in str.split():
        list_str.append(word)

    new_dict = {}
    c = 0

    for letter in list_pattern:
        if letter not in new_dict:
            new_dict[letter] = ''
        if list_str[c] not in new_dict[letter]:
            new_dict[letter] = list_str[c]
        c = c + 1

    for key in new_dict:
        if len(new_dict[key]) != 1:
            print (len(new_dict[key]))
            print (new_dict[key])
            print ('false')

    print ('true')
    print(new_dict)

wordPattern("abba","dog cat cat dog")

我想解决的问题是: 给定一个模式和一个字符串str,找出str是否遵循相同的模式。你知道吗

这里follow的意思是完全匹配,即在模式中的字母和str中的非空单词之间有一个双射

示例:

pattern=“abba”,str=“dog cat dog”应返回true。你知道吗

pattern=“abba”,str=“dog cat fish”应返回false。你知道吗

pattern=“aaaa”,str=“dog cat dog”应返回false。你知道吗

pattern=“abba”,str=“dog”应返回false。你知道吗

注意事项:

您可以假设模式只包含小写字母,str包含由单个空格分隔的小写字母。你知道吗

结果是:

3
dog
false
3
cat
false
true
{'a': 'dog', 'b': 'cat'}

我不明白为什么我得到3作为Len(list\u name[key\u name]),而它明显是1?请注意,我知道可能有更好的方法等,但我开始学习,我想了解我的错误。你知道吗


Tags: keyinfalsenewfor模式dictlist
1条回答
网友
1楼 · 发布于 2024-10-02 22:30:03

您的逻辑可以简化为几行:

def wordPattern(pattern, mystr):
    d = dict(zip(pattern, mystr.split()))   
    return mystr.split() == list(map(d.get, pattern))

wordPattern("abba","dog cat cat dog")  # True

解释

  • 创建一个字典,通过zip将字母映射到单词。你知道吗
  • 测试单词列表是否与通过字典映射字母生成的列表对齐。你知道吗

更新

您可以通过if语句轻松处理边缘情况:

def wordPattern(pattern, mystr):
    d = dict(zip(pattern, mystr.split()))

    if sorted(d.values()) != sorted(set(d.values())):
        return False

    return mystr.split() == list(map(d.get, pattern))

wordPattern("abba","dog dog dog dog")  # False

相关问题 更多 >