从具有相同索引的矩阵生成列表

2024-04-19 11:51:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个矩阵,有N个列表,每个列表有3个字符串,每个字符串有M个字符

例如,N=3(3个列表)和M=3(所有字符串都是3个字符):

M = [['123', '456', '789'], ['abc', 'def', 'ghi'], ['ABC', 'DEF', 'GHI']]

我需要生成相同索引值的列表,让我向您展示输出:

['1aA', '2bB', '3cC']
['1aD', '2bE', '3cF']
['1aG', '2bH', '3cI']

['1dA', '2eB', '3fC']
['1dD', '2eE', '3fF']
['1dG', '2eH', '3fI']

['1gA', '2hB', '3iC']
['1gD', '2hE', '3iF']
['1gG', '2hH', '3iI']

['4aA', '5bB', '6cC']
['4aD', '5bE', '6cF']
['4aG', '5bH', '6cI']

['4dA', '5eB', '6fC']
['4dD', '5eE', '6fF']
['4dG', '5eH', '6fI']

['4gA', '5hB', '6iC']
['4gD', '5hE', '6iF']
['4gG', '5hH', '6iI']

['7aA', '8bB', '9cC']
['7aD', '8bE', '9cF']
['7aG', '8bH', '9cI']

['7dA', '8eB', '9fC']
['7dD', '8eE', '9fF']
['7dG', '8eH', '9fI']

['7gA', '8hB', '9iC']
['7gD', '8hE', '9iF']
['7gG', '8hH', '9iI']

你有什么建议我该怎么做吗


Tags: 字符串列表def矩阵建议abc个字符ghi
2条回答

解决这个问题的一种方法是使用itertools.product获取所有字符串的笛卡尔积,对于每个积,在同一索引处选取项,并使用zip从中生成一个字符串

from itertools import product

M = [['123', '456', '789'], ['abc', 'def', 'ghi'], ['ABC', 'DEF', 'GHI']]

output = []

#Take product of all elements
for lst in product(*M):

    #Take the characters at the same index and make a string out of them via zip
    res = [''.join(item) for item in zip(*lst)]

    #Append that list to final output
    output.append(res)

for item in output:
    print(item)

输出将是

['1aA', '2bB', '3cC']
['1aD', '2bE', '3cF']
['1aG', '2bH', '3cI']
['1dA', '2eB', '3fC']
['1dD', '2eE', '3fF']
['1dG', '2eH', '3fI']
['1gA', '2hB', '3iC']
['1gD', '2hE', '3iF']
['1gG', '2hH', '3iI']
['4aA', '5bB', '6cC']
['4aD', '5bE', '6cF']
['4aG', '5bH', '6cI']
['4dA', '5eB', '6fC']
['4dD', '5eE', '6fF']
['4dG', '5eH', '6fI']
['4gA', '5hB', '6iC']
['4gD', '5hE', '6iF']
['4gG', '5hH', '6iI']
['7aA', '8bB', '9cC']
['7aD', '8bE', '9cF']
['7aG', '8bH', '9cI']
['7dA', '8eB', '9fC']
['7dD', '8eE', '9fF']
['7dG', '8eH', '9fI']
['7gA', '8hB', '9iC']
['7gD', '8hE', '9iF']
['7gG', '8hH', '9iI']

或者一行一行的列表理解

output = [[''.join(item) for item in zip(*lst)] for lst in product(*M)]

使用itertools.product()zip()我们可以将我们需要的元素组合在一起,然后从它们生成所有特定的字符串(“单元格内容”),然后将它们“重塑”为一个矩阵

试试这个:

from itertools import product

M = [['123', '456', '789'], ['abc', 'def', 'ghi'], ['ABC', 'DEF', 'GHI']]

nums = zip(*M[0])
lowers = zip(*M[1])
uppers = zip(*M[2])
groups = zip(nums, lowers, uppers)
strings = [[''.join(chars) for chars in [*product(*g)]] for g in groups ]
string_chunks = [list(chunk) for chunk in zip(*strings)]
result = [string_chunks[i:i + len(M)] for i in range(0, len(string_chunks), len(M))]
for matrix in result:
    for row in matrix:
        print(row)
    print()

输出:

['1aA', '2bB', '3cC']
['1aD', '2bE', '3cF']
['1aG', '2bH', '3cI']

['1dA', '2eB', '3fC']
['1dD', '2eE', '3fF']
['1dG', '2eH', '3fI']

['1gA', '2hB', '3iC']
['1gD', '2hE', '3iF']
['1gG', '2hH', '3iI']

['4aA', '5bB', '6cC']
['4aD', '5bE', '6cF']
['4aG', '5bH', '6cI']

['4dA', '5eB', '6fC']
['4dD', '5eE', '6fF']
['4dG', '5eH', '6fI']

['4gA', '5hB', '6iC']
['4gD', '5hE', '6iF']
['4gG', '5hH', '6iI']

['7aA', '8bB', '9cC']
['7aD', '8bE', '9cF']
['7aG', '8bH', '9cI']

['7dA', '8eB', '9fC']
['7dD', '8eE', '9fF']
['7dG', '8eH', '9fI']

['7gA', '8hB', '9iC']
['7gD', '8hE', '9iF']
['7gG', '8hH', '9iI']

相关问题 更多 >