繁体   English   中英

如何检查python中两个列表中的所有匹配项?

[英]How do i check for all matches in two lists in python?

我在单词类型游戏中创建一个单词,我必须将输入的用户与可以从设置的字母中选出的单词列表进行比较,然后计算匹配次数。 我一直在寻找解决这个问题的方法,但是没有,我一点都不擅长编码,也许它真的很简单,但是我遇到了问题,请帮忙。

该代码是我在学校的项目的代码,它是设计一些可以运行的软件的,我想在一个单词类型的游戏中创建一个单词,但是我在搜索时就无法使用互联网的帮助,所以我希望有人可以回答这个问题。

import re
MW = "waterfall"
Words = "1. waterfall 2. flatware 3. lateral 4. lawfare 5. faller 6. 
falter 7. rafale 8. refall 9. relata 10. taller 11. tellar 12. wafter 
13. waller 14. wallet 15. afear 16. after 17. alate 18. aleft 19. 
alert 
20. altar 21. alter 22. areal 23. artal 24. artel 25. aware 26. farle 
27. fatal 28. fatwa 29. feart 30. fella 31. feral 32. fetal 33. fetwa 
34. flare 35. frate 36. later 37. lawer 38. ratal 39. ratel 40. reata 
41. talar 42. talea 43. taler 44. tawer 45. trawl 46. trefa 47. wafer 
48. waler 49. walla 50. water 51. wrate 52. afar 53. alae 54. alar 55. 
alef 56. alew 57. alfa 58. area 59. aret 60. arew 61. arle 62. earl 
63. 
fall 64. fare 65. farl 66. fart 67. fate 68. feal 69. fear 70. feat 
71. 
fell 72. felt 73. feta 74. flat 75. flaw 76. flea 77. flew 78. frae 
79. 
frat 80. fret 81. laer 82. lare 83. late 84. leaf 85. leal 86. lear 
87. 
leat 88. left 89. raft 90. rale 91. rata 92. rate 93. real 94. reft 
95. 
taal 96. tael 97. tala 98. tale 99. tall 100. tara 101. tare 102. tawa 
103. teal 104. tear 105. tela 106. tell 107. terf 108. tref 109. trew 
110. twae 111. twal 112. waft 113. wale 114. wall 115. ware 116. wart 
117. wate 118. weal 119. wear 120. weft 121. well 122. welt 123. wert 
124. weta 125. aal 126. aft 127. ala 128. ale 129. alf 130. all 131. 
alt 132. are 133. arf 134. art 135. ate 136. awa 137. awe 138. awl 
139. 
ear 140. eat 141. eft 142. elf 143. ell 144. elt 145. era 146. erf 
147. 
eta 
148. ewt 149. faa 150. fae 151. far 152. fat 153. faw 154. fer 155. 
fet 
156. few 157. fra 158. lar 159. lat 160. law 161. lea 162. let 163. 
lew 
164. rat 165. raw 166. ref 167. ret 168. rew 169. tae 170. tar 171. 
taw 
172. tea 173. tef 174. tel 175. tew 176. twa 177. wae 178. war 179. 
wat 
180. wet 181. aa 182. ae 183. al 184. ar 185. at 186. aw 187. ea 188. 
ef 189. el 190. er 191. et 192. fa 193. fe 194. la 195. re 196. ta 
197. 
te 198. we"
y = re.sub(r'[^\w]', ' ', Words)
W = ''.join([i for i in y if not i.isdigit()])
Draw = W.split()

print(MW)
input_string = input("Type all the words you can find in the above 
words/word, separated by a comma:\n")
A = input_string.replace(" "," ").split(",")

for A in A:
    matchCount = 0
    if A in Draw:
        matchCount += 1
print (matchCount)

def common_data(Draw, A):
    common = 0
    for x in Draw:
        for y in A:
            if x == y:
                common += 1
                print (x)

当我输入两个单词时,此代码的输出为0,但我希望它是我键入的正确单词。

比较两个列表的一种方法是使用嵌套的for循环或for循环内的for循环。 一个循环用于用户输入,另一个循环用于您的列表。

userlist = ["apple", "banana", etc]
yourlist = ["apple", "cat", "banana"]
counter = 0
for userword in userlist:
    for yourword in yourlist:
         if userword == yourword:
              counter = counter + 1
print(counter)

counter是两个列表之间的匹配量。

问题在于您正在循环内设置matchCount ,因此在检查每个单词之前它将重置为零。 只需将其移出循环,即可获得所需的结果。

不要为这个错误感到难过,这是每个人在某个时候都会犯错的简单事情。


除了我的回答,我还提供有关您的代码的建议:

您不应将循环目标的名称用作循环变量。 使用for A in A:将覆盖的值A甚至在循环结束后。

在Python中,您可以使用三引号( """''' )创建多行字符串,这使使用长数据字符串更好用,尽管sakurashinken建议您对数据进行预格式化可能比将其格式化。将其保留为一个长字符串。

不要大写变量名的首字母,通常只为class保留这种处理方式,这就是为什么Stack Overflow用不同于其他名称的阴影突出显示这些单词的原因。 (全大写通常保留用于常量。)

您可以使用创建y的正则表达式来创建W而无需执行列表理解的额外步骤: re.sub(r'[\\W\\d]', ' ', words)将替换非单词字符和数字。 然后,您可以在一行中创建“从Words Draw Words

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM