簡體   English   中英

Python——同時迭代兩個列表

[英]Python — Iterating Through Two Lists Simultaneously

我正在嘗試為我編寫的密碼制作翻譯器,它需要能夠並排檢查 2 個列表,但我的程序不返回任何輸出。

def encrypt(message, key):
  
    for i in range(len(message)):
        ans = ""
        char = message[i]
        
        if(char == 1):
            for j in range(len(key)):  
                if(key[j] == 1):
                    ans = 'a'
                if(key[j] == 0):
                    ans = 'c'


        if(char == 0):
            for j in range(len(key)):
                if(key[j] == 1):
                    ans = 'd'
                if(key[j] == 0):
                    ans = 'b'   
    return ans
print(encrypt(str(1010), str(1100)))

我希望它輸出“adcb”。 我認為我把 return 語句放在哪里有問題? 我不知道。

看起來你想循環兩個等長的字符串,只包含字符'0''1' ,如果那個位置的兩個字符都是'1' ,你想返回一個包含'a'的等長字符串輸入等

所以,像這樣:

def encrypt(message, key):
    code = {('1', '1'): 'a', ('1', '0'): 'c', ('0', '1'): 'd', ('0', '0'): 'b'}
    return ''.join(
        code[(m, k)] for m, k in zip(message, key)
    )


print(encrypt('1010', '1100'))

結果:

adcb

並提供您嘗試使用循環和索引(這不是很pythonic)的“固定”版本:

def encrypt(message, key):
    ans = ''

    for i in range(len(message)):
        m = message[i]
        k = key[i]
        if m == '1':
            if k == '1':
                ans += 'a'
            if k == '0':
                ans += 'c'
        if m == '0':
            if k == '1':
                ans += 'd'
            if k == '0':
                ans += 'b'

    return ans

請注意,我已經刪除了多余的括號和導致錯誤結果的額外循環。

您可以進一步簡化:

def encrypt(message, key):
    ans = ''

    for i in range(len(message)):
        if message[i] == '1':
            if key[i] == '1':
                ans += 'a'
            else:
                ans += 'c'
        else:
            if key[i] == '1':
                ans += 'd'
            else:
                ans += 'b'

    return ans

從那里:

def encrypt(message, key):
    ans = ''

    for m, k in zip(message, key):        
        if m == '1':
            if k == '1':
                ans += 'a'
            else:
                ans += 'c'
        else:
            if k == '1':
                ans += 'd'
            else:
                ans += 'b'

    return ans

作為額外的獎勵,這里有一個粗糙的單行代碼,它有點過分了,超越了 Pythonic:

def encrypt(message, key):
    return ''.join('bdca'[int(m)*2 + int(k)] for m, k in zip(message, key))

問題在於條件語句char == 1char == 0 由於字符串和整數是兩種不同的數據類型,條件語句的計算結果為False並且內部 for 循環永遠不會運行,因此該函數不返回任何輸出。 要解決此問題,請將它們更改為char == '1'char == '0' 相同的規則適用於 key[j] == 1 和 key[j] == 0,因為 key 作為字符串傳遞到函數中。

暫無
暫無

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

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