通过乘以列表创建列表,索引保持附加状态



我正在努力解决这个问题:https://leetcode.com/problems/letter-combinations-of-a-phone-number/但是当将该值附加到列表内的第一个列表时,它也将其附加到第4个和第7个,因为它们仍然与第一个列表一起计数。是因为我使用c*=len(s[I](吗?我该如何解决这个问题?

def g(s):
s  = [int(i) for i in s]
print(s)
m = len(s)
num = 0
while m>0:
if s[num] == 2:
s[num] = ["a","b","c"]
elif s[num] == 3:
s[num] = ["d","e","f"]
elif s[num] == 4:
s[num] = ["g","h","i"]
elif s[num] == 5:
s[num] = ["j","k","l"]
elif s[num] == 6:
s[num] = ["m","n","o"]
elif s[num] == 7:
s[num] = ["p","q","r", "s"]
elif s[num] == 8:
s[num] = ["t","u","v"]
elif s[num] == 9:
s[num] = ["w","x","y", "z"]
else:
s[num] = [" "]
m -=1
num +=1

c = [[i] for i in s[0]]
for i in range(1,len(s)):
print("i",i)
c *= len(s[i])
print(c[0])
for j in range(len(s[i])):
print("j",j)
if len(s[i])==3:
for k in range(j*3, (j*3)+len(s[i])):
print("k",k)
c[k].append(s[i][j])
print(c)
else:
for k in range(j*4, (j*4)+len(s[i])):
print("k",k)
c[k].append(s[i][j])        
print(c)        

return c

您会发现itertools对此很有用。

从常量字典开始。无需将数字转换为整数。

这应该有效。。。

from itertools import product
KEYBOARD = {'2': 'abc',
'3': 'def',
'4': 'ghi',
'5': 'jkl',
'6': 'mno',
'7': 'pqrs',
'8': 'tuv',
'9': 'wxyz'}
def g(s):
lst = [KEYBOARD[c] for c in s]
return [''.join(p) for p in product(*lst)]

最新更新