Python 3:关于字谜的大学作业非常困难(至少对我而言)
Posted
技术标签:
【中文标题】Python 3:关于字谜的大学作业非常困难(至少对我而言)【英文标题】:Python 3: very difficult (at least for me) university homework about anagrams 【发布时间】:2020-08-10 05:08:11 【问题描述】:我有这个功课阻碍了我。我实际上找到了一个可以正常工作的解决方案,但前提是要分析的数据不是很大。
我有一个字符串列表,其中每个单词都是我们称之为“生成器”的其他一些单词的字谜。 对于每个“生成器”,相关的字符串可以是它的字谜或字谜 + 1 个字母。 我需要找到相关词数最多的“生成器”。
这个例子解释得更好:
字符串是:
特洛塔 曲子 艺术 部分 芋头 小跑 罗塔 奥尔塔 门最大单词数的“生成器”是'arto'(或者是字谜),相关的单词是:
艺术 orta('arto' 的字谜) parto('arto' + 字母 p 的变位词) porta('arto' + 字母 p 的变位词) rotta('arto' + 字母 t 的变位词) 芋头('arto' 的变位词) trota('arto' + 字母 t 的变位词)排除的词是“tratto”和“trotta”,因为它们太长了。
可能是“生成器”没有包含在最终结果中,例如:
比尔 baee 蜜蜂“生成器”是“蜜蜂”
这是我的解决方案:
def open_r(ftesto_in):
lista = []
with open(ftesto_in, encoding='utf8') as f:
for word in f:
lista.append(word.strip())
return lista
def es(ftesto_in):
lista=open_r(ftesto_in)
d =
for i in range(len(lista)):
a = lista[i]
for j in range(i+1, len(lista)):
b = lista[j]
if len(a) == len(b) or len(a) == len(b)+1 or len(a) == len(b)-1:
gen = tuple(generator(a,b))
if len(gen) == len(a) or len(gen) == len(a)-1:
dic_upd(d, gen, a)
if len(gen) == len(b) or len(gen) == len(b)-1:
dic_upd(d, gen, b)
d = k: list(set(v)) for k, v in d.items()
result = maximum(d)
return result
def dic_upd(d,k,v):
if k not in d:
d[k] = [v]
else:
d[k].append(v)
def maximum(d):
result = 0
lista = []
for k,v in d.items():
count = len(v)
if count > result:
result = count
lista.clear()
for i in v:
lista.append(i)
return lista
def generator(a,b):
res = []
a = list(a)
b = list(b)
for i in a:
if i in b:
res.append(i)
b.remove(i)
return sorted(res)
当字符串的数量超过 2-300 或者字符串很长时,我的程序会花费很多秒或分钟。 你有更好的想法如何找到这些词吗? 谢谢!
【问题讨论】:
【参考方案1】:提示:计算输入中每个字符的出现次数,每个单词。您可以仅使用它有效地解决问题吗?例如:
a o p r t
trota 1 1 0 1 2
tratto 1 1 0 1 3
arto 1 1 0 1 1
parto 1 1 1 1 1
taro 1 1 0 1 1
trotta 1 1 0 1 3
rotta 1 1 0 1 2
orta 1 1 0 1 1
porta 1 1 1 1 1
【讨论】:
我不确定你的意思。如果范围是准确地找到字谜,我可以计算字母并放入字典,但在这种情况下,你如何用你的方法聚合这三个单词? “rotta 1 1 0 1 2”“orta 1 1 0 1 1”“porta 1 1 1 1 1” @MarioL 一次解决一列。例如,当查看“a”列时,您会看到每个单词都有 1 个“a”,这样就很容易了:您的解决方案单词正好包含 1 个“a”。如果这不是那么容易,您将不得不选择 k 以使该列中最多的单词有 k。我会把 +1 额外的字母留给你作为练习。以上是关于Python 3:关于字谜的大学作业非常困难(至少对我而言)的主要内容,如果未能解决你的问题,请参考以下文章