我需要一些关于Python3的帮助,请
我有一个简单的代码,它将列表的最小值转换为字符串
source_array = [5,2,3,7]
i = 0
while min(source_array) % 2 == 0:
i = source_array.index(min(source_array))
source_array[i] = str(source_array[i])
它给了我一个错误:'<' not supported between instances of 'str' and 'int'
我认为,这只是一种语言功能,但这样的代码非常有效:
b = [5,2,3,7]
b[1] = str(b[1])
print(b)
Output:
[5, '2', 3, 7]
这种行为的原因是什么?
必须消除非int
值才能获得最小值。您可以使用lambda
函数来获取仅包含int
值的新列表
source_array = [5,2,3,7]
i = 0
while min(list(filter(lambda x: type(x) == int, source_array))) % 2 == 0:
i = source_array.index(min(source_array))
source_array[i] = str(source_array[i])
print(source_array)
输出
[5, '2', 3, 7]
编辑:
我检查过是否有4个数字没有3个。算法无法正常工作。我必须将filter
和lambda
表达式定义为source_array.index(...)
。但是,我不喜欢多次定义同一个命令。也许您可以使用一个变量作为临时列表。
注意如果所有数字都是偶数,您将得到另一个错误,您应该检查是否有任何项为int?
source_array = [5,2,4,7]
i = 0
while min(list(filter(lambda x: type(x) == int, source_array))) % 2 == 0:
i = source_array.index(min(list(filter(lambda x: type(x) == int, source_array))))
source_array[i] = str(source_array[i])
print(source_array)
输出:
[5, '2', '4', 7]
更多的偶数和一个奇数。
source_array = [12, 4, 8, 6, 15]
['12', '4', '8', '6', 15]
这一个工作得很好:
source_array = [5,2,3,7]
i = 0
if min(source_array) % 2 == 0:
i = source_array.index(min(source_array))
source_array[i] = str(source_array[i])
print(source_array)
问题出在循环中,第二次进入while
时,它正在比较字符串和int,但它不喜欢它