找回密码
 立即注册

扫一扫,访问微社区

QQ登录

只需一步,快速开始

查看: 4437|回复: 6

[求助] 关于迭代器的问题

1

主题

3

帖子

3

积分

贫民

积分
3
Huang 发表于 2017-11-21 17:20:43 | 显示全部楼层 |阅读模式
1威望
内容是摩斯密码的每一个字母的第一位都丢了 所以一个码可能对应好几个字母,需要把所有的可能性都输出来
然后 和字典对比 有效的词再留下
好像是用迭代器 itertool 但是我不懂怎么用…
希望大神能指点一下,没有思路...谢谢。

回复

使用道具 举报

0

主题

956

帖子

956

积分

圣骑士

积分
956
sheeboard 发表于 2017-11-21 20:19:14 | 显示全部楼层
本帖最后由 sheeboard 于 2017-11-21 21:12 编辑

我看了一下,摩尔斯码分1位的有2个,2位的有4个,3位的有8个,4位的有12个,如果确定是每个字母只缺失首位,么那1位的只有E,T两个,2位的(A,M),(I,N)相同,3位的(D,S),(G,R),(K,U),(O,W)相同,4位的(B,H),(C,F),(L,Z),(V,X)相同,J,P,Q,Y没相同,如果是不确定首位是否缺失,那么1,2位的(A,M,T),(I,N,E)相同,2,3位的(D,S,I),(G,R,N),(K,U,A),(O,W,N)相同,3,4位的(B,H,S),(C,F,R),(J,O),(L,Z,D),(P,G),(Q,K),(V,X,U),(Y,W)相同,所以说"一个码可能对应好几个字母"不太正确..
回复

使用道具 举报

1

主题

3

帖子

3

积分

贫民

积分
3
Huang  楼主| 发表于 2017-11-21 22:29:11 | 显示全部楼层
sheeboard 发表于 2017-11-21 20:19
我看了一下,摩尔斯码分1位的有2个,2位的有4个,3位的有8个,4位的有12个,如果确定是每个字母只缺失首位,么那1 ...

嗯?能否加下qq,我给您题能帮忙看下吗。
回复

使用道具 举报

2

主题

219

帖子

219

积分

版主

Rank: 7Rank: 7Rank: 7

积分
219

热心会员默默耕耘优秀版主

剑心无痕 发表于 2017-11-22 09:08:05 | 显示全部楼层
class Solution:
    Morse = {'g': '--.', 'l': '.-..', 'z': '--..', 'b': '-...', 'o': '---', 'm': '--', 'p': '.--.', 'c': '-.-.', 'q': '--.-', 'h': '....', 'r': '.-.', 'v': '...-', 'i': '..', 'w': '.--', 'f': '..-.', 'n': '-.', 'y': '-.--', 'd': '-..', 'k': '-.-', 'e': '.', 'a': '.-', 's': '...', 'x': '-..-', 'u': '..-', 't': '-', 'j': '.---'}
    def __init__(self):
        self.d = {}
        for i in self.Morse:
            if self.Morse[i][1:] in self.d:
                self.d[self.Morse[i][1:]].append(i)
            else:
                self.d[self.Morse[i][1:]] = [i]
    def main(self, input, diction):
        # input: list[str]
        # diction: list[str] 只包含小写字母'a-z'
        # return: list[str]
        res = []
        for i in input:
            if i in self.d:
                if res == []:
                    res = [j for j in self.d[i]]
                else:
                    t = []
                    for j in self.d[i]:
                        for k in res:
                            t.append(''.join([k, j]))
                    res = t
            else:
                print('没有在Morse字典里,请确认输入是否正确')
                return ''
        print(res) # 所有可能字符串
        r = []
        for i in res:
            if i in diction:
                r.append(i)
        return r

s = Solution()
s.main(['-.', '', ''], ['put', 'get', 'let', 'web', 'eat', 'are'])
回复

使用道具 举报

1

主题

3

帖子

3

积分

贫民

积分
3
Huang  楼主| 发表于 2017-11-22 13:05:47 | 显示全部楼层
剑心无痕 发表于 2017-11-22 09:08
class Solution:
    Morse = {'g': '--.', 'l': '.-..', 'z': '--..', 'b': '-...', 'o': '---', 'm': '-- ...

您好大神,列出所有可能性,是用得迭代器吗?
回复

使用道具 举报

2

主题

219

帖子

219

积分

版主

Rank: 7Rank: 7Rank: 7

积分
219

热心会员默默耕耘优秀版主

剑心无痕 发表于 2017-11-22 13:10:22 | 显示全部楼层
Huang 发表于 2017-11-22 13:05
您好大神,列出所有可能性,是用得迭代器吗?

用的列表list,是Iterable的,你要是想用Iterator,可以iter(res),要打印就得for i in r: print(i)了
回复

使用道具 举报

0

主题

956

帖子

956

积分

圣骑士

积分
956
sheeboard 发表于 2017-11-28 10:28:37 | 显示全部楼层
用itertools里的product
比如三位的单词
first=['p','g','l','w','e','a']
second=['u','e','a']
third=['t','b','e']
for word in itertools.product(first,second,third):
    ...:     print(''.join(word))
   
put
pub
pue
pet
peb
pee
pat
pab
pae
gut
gub
gue ......
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表