Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何检查是否可以从列表中的字母创建单词?_Python_String_List_Char - Fatal编程技术网

Python 如何检查是否可以从列表中的字母创建单词?

Python 如何检查是否可以从列表中的字母创建单词?,python,string,list,char,Python,String,List,Char,我正在尝试做一些类似于拼字游戏的事情 letters = ['s','w','r','a'] line_of_dic= ['s','w','r','a','a'] # printing original lists print("Original list : " + str(line_of_dic)) print("Original sub list : " + str(letters)) # using all() to # check subs

我正在尝试做一些类似于拼字游戏的事情

letters = ['s','w','r','a']
line_of_dic= ['s','w','r','a','a']


# printing original lists
print("Original list : " + str(line_of_dic))
print("Original sub list : " + str(letters))

# using all() to
# check subset of list
flag = 0
if (all(x in line_of_dic for x in letters)):
    flag = 1

# printing result
if (flag):
    print("Yes, the word can be created")
else:
    print("No, the word cant be.")

这是我无法修复的代码部分,word无法创建,但它打印的是。是否可以检查所有字母是否都在dic的第行,但元素是否是两倍或三倍来检查?此外,是否可以不使用花哨的库?

您需要计算每个单词中每个字符的数量,然后比较这些值。你可以用字典来做这件事

ltrs = {}
lod = {}

for char in letters:
    ltrs[char] = ltrs.get(char,0) + 1

for char in line_of_dic:
    lod[char] = lod.get(char,0) + 1
然后你可以看到每个字符是否足够组成这个单词

In [3]: ltrs
Out[3]: {'a': 1, 'r': 1, 's': 1, 'w': 1}

In [4]: lod
Out[4]: {'a': 2, 'r': 1, 's': 1, 'w': 1}

我可以为你做那些字典

import collections
ltrs = collections.Counter(letters)
lod = collections.Counter(line_of_dic)

In [6]: ltrs
Out[6]: Counter({'a': 1, 'r': 1, 's': 1, 'w': 1})

In [7]: lod
Out[7]: Counter({'a': 2, 'r': 1, 's': 1, 'w': 1})
减去计数器,你可以看到是否有足够的

In [31]: lod-ltrs
Out[31]: Counter({'a': 1})

lod
ltr
多了一个
'a'
,您可以使用字典结构。要从列表创建词典,您可以编写一个简单的代码:

letterDict = {}
lineDict = {}

for item in letters:
    if item not in letterDict:
        letterDict[item] = 1
    else:
        letterDict[item] += 1
        
for item in line_of_dic:
    if item not in lineDict:
        lineDict[item] = 1
    else:
        lineDict[item] += 1
在这一点之后,您可以简单地比较两个字典:

if letterDict == lineDict:
    print("Yes, the word can be created")
else:
    print("No, the word cant be.")

这可以通过比较每个字母的计数在一行上完成:

flag = 0
if all(line_of_dic.count(char) == letters.count(char) for char in line_of_dic):
    flag = 1

这不是检查字母是否存在,而是检查计数是否匹配。

如果元素是两倍或三倍来检查这是什么意思?
没有奇特的库
-您可以使用内置python模块吗?我的意思是,在本例中,dic行中的单词不能从上面的字母创建,但是这里的输出是可以的。@MauriceMeyer OP只想在
字母中存在dic的
行中的每个字符的相同计数时返回Yes。他们希望能够从
字母
@wwii中构建dic的
的内容是的,我可以使用它们奇妙的解决方案,谢谢您的帮助谢谢您的解决方案