如何实现包含两个列表长度和返回矩阵对的Python代码



给定列表

lis1 = [1, 0, 3]
lis2 = [2, 5, 0]

所需的结果,仅当满足以下条件时:

  • 列表长度与len(lis1) == len(lis2)匹配
  • 如果两个数字的值都为0,则应单独插入两个列表中较大数字的英文单词
one_two   zero_two    three_two
one_five  zero_five   three_five
one_zero  five        three_zero

我的代码如下,它没有给我答案中显示的确切内容

def matrix(l1, l2):
num_word = {
0: 'zero',
1: 'one',
2: 'two',
3: 'three',
4: 'four',
5: 'five',
6: 'six',
7: 'seven',
8: 'eight',
9: 'nine'
}
matrix = ''
for i, j in enumerate(l1):
string = ''
for n, k in enumerate(l2):
if num_word[j] == 'zero' and num_word[k] == 'zero':
maximum = max(l1, l2)
string += f'{string}t'
else:
string += f'{num_word[i]}_{num_word[j]}t'
matrix += f'{string}n'
return matrix
print(matrix([1, 0, 3], [2, 5, 0]))
  1. 您的迭代顺序错误。输出中的每一行用于lis2中的相同值,因此外循环应该在l2上,而不是l1
  2. num_word[i]使用列表索引而不是列表值。您应该使用num_word[j]num_word[k]。使用更有意义的变量名应该有助于避免出现这样的错误
  3. 根本不需要使用enumerate,因为算法中没有任何内容依赖于列表索引
  4. 您没有正确计算maximum。您将其设置为两个列表中较大的一个,而不是两个列表的最大元素。您可以将列表与l1+l2组合,然后调用max()
  5. 计算出maximum之后,就不用它了,而是将string代入它本身。您需要获得num_words的相应元素
  6. 您不需要string,只需直接连接到matrix即可
  7. 没有必要每次都重新计算maximum,因为它不会改变。在循环之前获取一次
  8. 要检查两个数字是否都为零,请检查数字而不是单词
  9. 您永远不会检查长度是否相等
def matrix(l1, l2):
if len(l1) != len(l2):
return ""
num_word = {
0: 'zero',
1: 'one',
2: 'two',
3: 'three',
4: 'four',
5: 'five',
6: 'six',
7: 'seven',
8: 'eight',
9: 'nine'
}
matrix = ''
maximum = num_word[max(l1 + l2)]
for num2 in l2:
for num1 in l1:
if num1 == 0 and num2 == 0:
matrix += f'{maximum}t'
else:
matrix += f'{num_word[num1]}_{num_word[num2]}t'
matrix += 'n'
return matrix
print(matrix([1, 0, 3], [2, 5, 0]))

最新更新