我有一种算法,可以使用程序生成的加密密钥将字符串加密为一长串数字。它通过一次加密一个单词并将其放入嵌套列表中来工作。

例如:

"4 3 1 4 5 5 2 4 6 2 3"


这将是两个单词,因为第一个数字是4,表示后四个数字代表一个单词的四个字母。在这5个数字之后,有5个含义,表示接下来的5个数字代表一个单词的5个字母。

我不知道如何转换:

"4 3 1 4 5 5 2 4 6 2 3"


进入嵌套列表:

[[3,1,4,5], [2,4,6,2,3] ]


我尝试了许多概念,但似乎无法解决任何问题。有任何想法吗?

如果需要,这是加密代码:

import string
import random

def generateKey():
    return(''.join(random.SystemRandom().choice(string.ascii_uppercase + string.digits) for _ in range(2)))

def encrypt(message, encryptionKey = list(generateKey())):
    print(''.join(encryptionKey))
    message = message.split(' ')

    array = []

    z = 0
    for word in message:
        array.append([])

    for word in message:
        array[z].append(len(word)*ord(encryptionKey[0]))
        for letter in word:
            array[z].append(ord(letter)*ord(encryptionKey[1]))
        z += 1

    z = 0
    for row in array:
        for _set in row:
            print(str(_set) + ' ', end='')
        print('\n')

    return(array) #Even though it returns a list, this data will be transferred from one person to another via one long string of text

最佳答案

假设您的加密函数格式正确,这将产生您要求的输出。基本上,它是通过创建一个共享的迭代器来工作的,该迭代器将在子例程的调用之间保持其位置。

def sentence(text):
    iter_text = iter(text.split())
    # split text on spaces and create a single iterator from it

    def word(i_text, num_chars):
        """Helper function to return a list of the num_chars length
        pulled out of the iterator i_text"""

        return [next(i_text) for _ in range(num_chars)]
        # [int(next(i_text)) ... ] for your literal output, but since you're
        # encrypting as a string it seems more consistent to DECRYPT to a string

    return [word(iter_text, int(ch)) for ch in iter_text]


例:

>>> text = '4 3 1 4 5 5 2 4 6 2 3'
>>> result = sentence(text)
>>> print(result)
[['3', '1', '4', '5'], ['2', '4', '6', '2', '3']]

关于python - 如何使用Python中的一长串信息重新创建嵌套列表?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27884635/

10-10 11:47