给定列表
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]))
- 您的迭代顺序错误。输出中的每一行用于
lis2
中的相同值,因此外循环应该在l2
上,而不是l1
上 num_word[i]
使用列表索引而不是列表值。您应该使用num_word[j]
和num_word[k]
。使用更有意义的变量名应该有助于避免出现这样的错误- 根本不需要使用
enumerate
,因为算法中没有任何内容依赖于列表索引 - 您没有正确计算
maximum
。您将其设置为两个列表中较大的一个,而不是两个列表的最大元素。您可以将列表与l1+l2
组合,然后调用max()
- 计算出
maximum
之后,就不用它了,而是将string
代入它本身。您需要获得num_words
的相应元素 - 您不需要
string
,只需直接连接到matrix
即可 - 没有必要每次都重新计算
maximum
,因为它不会改变。在循环之前获取一次 - 要检查两个数字是否都为零,请检查数字而不是单词
- 您永远不会检查长度是否相等
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]))