簡體   English   中英

通過乘以列表創建列表,索引保持附加

[英]create a list by multiplying list, indexes remain attached

我正在嘗試解決這個問題: https://leetcode.com/problems/letter-combinations-of-a-phone-number/但是當將值附加到列表中的第一個列表時,它 append 它也是第 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)]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM