字母與數字我有什麼:翻譯使用python
s='areyo uanap ppple'
我想要什麼:
s='12345 12324 11123'
我應該使用字典和翻譯在s.split(' ')
每個i
?還是有更簡單的方法?
字母與數字我有什麼:翻譯使用python
s='areyo uanap ppple'
我想要什麼:
s='12345 12324 11123'
我應該使用字典和翻譯在s.split(' ')
每個i
?還是有更簡單的方法?
如果我理解正確的OP,這可能是一個解決辦法:
s='areyo uanap ppple'
def trans(word):
d = {}
for char in word:
if char not in d.keys():
d[char] = len(d.keys()) + 1
yield str(d[char])
o = ' '.join([ ''.join(trans(word)) for word in s.split(' ')])
print repr(o)
導致:
'12345 12324 11123'
建設上unutbu答案的unique
,這也將是可能的:
' '.join([''.join([ { a:str(i+1) for i,a in enumerate(unique(word)) }[char] for char in word]) for word in s.split(' ') ])
這裏是另一個,我想我有點被帶走:)
' '.join([ w.translate(maketrans(*[ ''.join(x) for x in zip(*[ (a,str(i+1)) for i,a in enumerate(unique(w)) ]) ])) for w in s.split(' ') ])
你可以使用unicode.translate:
import string
def unique(seq):
# http://www.peterbe.com/plog/uniqifiers-benchmark (Dave Kirby)
# Order preserving
seen = set()
return [x for x in seq if x not in seen and not seen.add(x)]
def word2num(word):
uniqs = unique(word)
assert len(uniqs) < 10
d = dict(zip(map(ord,uniqs),
map(unicode,string.digits[1:])))
return word.translate(d)
s = u'areyo uanap ppple'
for word in s.split():
print(word2num(word))
產生
12345
12324
11123
需要注意的是,目前還不清楚,你想,如果有一個字超過9個唯一字母發生什麼。如果word2num
通過這樣的話,我已經使用assert
來投訴。
單詞中不會有超過5個唯一字母,因爲每個5個字母都是獨立考慮的。字符串如'abcde fghij ffabc'將被翻譯爲'12345 12345 11234' – calvin
使用unique_everseen()
從itertools recipes:
In [5]: def func(s):
for x in s.split():
dic={}
for i,y in enumerate(unique_everseen(x)):
dic[y]=dic.get(y,i+1)
yield "".join(str(dic[k]) for k in x)
dic={}
...:
In [6]: " ".join(x for x in func('areyo uanap ppple'))
Out[6]: '12345 12324 11123'
In [7]: " ".join(x for x in func('abcde fghij ffabc'))
Out[7]: '12345 12345 11234'
s='areyo uanap ppple'
incr=1
out=''
dict={}
for x in s:
if ' ' in x:
incr=1
dict={}
out+=' '
continue;
if x in dict.keys():
out+=str(dict[x])
continue;
out+=str(incr)
dict[x]=incr
incr=incr+1
print out //12345 12324 11123
,我沒有看到這種映射。你首先將'a'翻譯成'1'(在第一個單詞中),然後再把'a'翻譯成'2'(第二個單詞)... – mgilson
我認爲OP對每個單詞都重新開始。 –
請將字母定義爲數字映射。 – martineau