Python 查找列表中重复项的位置及其位置
我想调用列表中的某些单词(长度大于11个字符),并通过在手机上使用相同的按键来找出可以键入的单词,例如“computorganizations”和“constrations”,它们共享相同的代码(2667874284667) 我能够用笨拙但有效的编码把每个单词变成一个数字字符串Python 查找列表中重复项的位置及其位置,python,find,set,Python,Find,Set,我想调用列表中的某些单词(长度大于11个字符),并通过在手机上使用相同的按键来找出可以键入的单词,例如“computorganizations”和“constrations”,它们共享相同的代码(2667874284667) 我能够用笨拙但有效的编码把每个单词变成一个数字字符串 numbers = [] dial = [] for word in lowers: if len(word)>11 and "\'" not in word: dial.append(wo
numbers = []
dial = []
for word in lowers:
if len(word)>11 and "\'" not in word:
dial.append(word)
if len(word)>11 and "\'" not in word:
worda = word.replace('a','2')
wordb = worda.replace('b','2')
wordc = wordb.replace('c','2')
wordd = wordc.replace('d','3')
worde = wordd.replace('e','3')
wordf = worde.replace('f','3')
wordg = wordf.replace('g','4')
wordh = wordg.replace('h','4')
wordi = wordh.replace('i','4')
wordj = wordi.replace('j','5')
wordk = wordj.replace('k','5')
wordl = wordk.replace('l','5')
wordm = wordl.replace('m','6')
wordn = wordm.replace('n','6')
wordo = wordn.replace('o','6')
wordp = wordo.replace('p','7')
wordq = wordp.replace('q','7')
wordr = wordq.replace('r','7')
words = wordr.replace('s','7')
wordt = words.replace('t','8')
wordu = wordt.replace('u','8')
wordv = wordu.replace('v','8')
wordw = wordv.replace('w','9')
wordx = wordw.replace('x','9')
wordy = wordx.replace('y','9')
wordz = wordy.replace('z','9')
numbers.append(wordz)
numberset = set(numbers)
然后我将搜索每个数字出现的次数,如果大于1,则记录位置并将其从另一个列表中拉到一起,以元组的形式提供它们。我不知道如何找出与位置相同的号码。我会这样做:我会使用翻译表将字母映射到拨号号码,然后在每个号码上创建一组单词。然后,我将迭代生成的dict,以获得包含多个单词的dict
from pprint import pprint
from collections import defaultdict
dialer_table = str.maketrans({
'a':'2',
'b':'2',
'c':'2',
'd':'3',
'e':'3',
'f':'3',
'g':'4',
'h':'4',
'i':'4',
'j':'5',
'k':'5',
'l':'5',
'm':'6',
'n':'6',
'o':'6',
'p':'7',
'q':'7',
'r':'7',
's':'7',
't':'8',
'u':'8',
'v':'8',
'w':'9',
'x':'9',
'y':'9',
'z':'9',
})
dial = defaultdict(set)
for word in lowers:
if len(word) > 11 and "\'" not in word:
dial[word.translate(dialer_table)].add(word)
pprint([dialset for dialset in dial.values() if len(dialset) > 1])
我会这样做:我会使用翻译表将字母映射到拨号号码,然后在每个号码上创建一组单词。然后,我将迭代生成的dict,以获得包含多个单词的dict
from pprint import pprint
from collections import defaultdict
dialer_table = str.maketrans({
'a':'2',
'b':'2',
'c':'2',
'd':'3',
'e':'3',
'f':'3',
'g':'4',
'h':'4',
'i':'4',
'j':'5',
'k':'5',
'l':'5',
'm':'6',
'n':'6',
'o':'6',
'p':'7',
'q':'7',
'r':'7',
's':'7',
't':'8',
'u':'8',
'v':'8',
'w':'9',
'x':'9',
'y':'9',
'z':'9',
})
dial = defaultdict(set)
for word in lowers:
if len(word) > 11 and "\'" not in word:
dial[word.translate(dialer_table)].add(word)
pprint([dialset for dialset in dial.values() if len(dialset) > 1])
编一本字典可能是个好主意
charmap = { 'a' : '2', 'b' : '2', etc... }
wordz = defaultdict(list)
for word in lowers:
wordz[''.join(charmap[c] for c in word)].append(word)
for k,v in wordz.items():
if len(v) > 1:
print('{}:{}'.format(k, v))
将为您提供:
2667874284667:['compurgations', 'constrictions']
...
编一本字典可能是个好主意
charmap = { 'a' : '2', 'b' : '2', etc... }
wordz = defaultdict(list)
for word in lowers:
wordz[''.join(charmap[c] for c in word)].append(word)
for k,v in wordz.items():
if len(v) > 1:
print('{}:{}'.format(k, v))
将为您提供:
2667874284667:['compurgations', 'constrictions']
...
要计算某事物在列表中出现的次数,应使用:
myList = ["a","b","c","a"]
myList.count("a")
2
要计算某事物在列表中出现的次数,应使用:
myList = ["a","b","c","a"]
myList.count("a")
2
我喜欢这个,因为它很紧凑。然而,当我到达
words[[charmap[c]for c in word]]时,append(word)
我得到了TypeError:字符串索引必须是整数,而不是list。我的错误是,charmap必须是字符串并加入结果。TypeError:序列项0:预期的字符串,int-find对不起,从未使用过defaultdict,因此我对发生的事情一无所知。我使用了c Elsware,但更改了它,仍然得到了错误。请确保charmap是“a”:“2”不是“a”:2AH!。很好用,你知道我怎样才能只打印那些有多种变体的吗?我喜欢这个,因为它很紧凑。然而,当我到达words[[charmap[c]for c in word]]时,append(word)
我得到了TypeError:字符串索引必须是整数,而不是list。我的错误是,charmap必须是字符串并加入结果。TypeError:序列项0:预期的字符串,int-find对不起,从未使用过defaultdict,因此我对发生的事情一无所知。我使用了c Elsware,但更改了它,仍然得到了错误。请确保charmap是“a”:“2”不是“a”:2AH!。很好用,你知道我怎样才能只打印那些有多种变体的吗?