我将一步一步地解释这个问题,并且根据要求,我将尽量避免首先定义函数或列出理解,并尝试解释如何从for到列出理解或定义函数。在
我们从列表nums开始,定义两个空列表。在其中一个中,我们将把偶数的位置存储在nums中,而在另一个中,我们将存储奇数的位置:#nums = [2, 4, 6, 8, 7]
nums = [1, 3, 4, 5]
odds = []
evens = []
for i,num in enumerate (nums):
if num % 2 == 1:
odds.append(i)
elif num % 2 == 0:
evens.append(i)
我们将打印长度为1的列表:
^{pr2}$
有一个elif而不是else来检查是否只有一个数字与其他数字不同,但是它可以被else代替。在
现在来简化代码并使代码更具python风格。在
使用列表理解,可以在同一行中编写赔率和平均数列表。因此,for循环可以简化为2行:odds = [i for i,num in enumerate(nums) if num % 2 == 1]
evens = [i for i,num in enumerate(nums) if num % 2 == 0]
然后,如果您要检查多个列表,那么将所有命令打包到一个函数中会很有趣。这样,只需调用您定义的函数,所有命令都将立即执行。在
函数是用def命令定义的,后跟function_name(input1,input2...):,最后,可以选择放置一行包含return output1,output2...。在这种情况下,只有一个输入、数字列表和一个输出,即奇数/偶数一出的索引,因此:def oddeven_one_out(num_list):
odds = [i for i,num in enumerate(nums) if num % 2 == 1]
evens = [i for i,num in enumerate(nums) if num % 2 == 0]
if len(odds)==1:
result = odds[0]
elif len(evens)==1:
result = evens[0]
return result
现在,可以为每个列表调用函数:nums1 = [1, 3, 4, 5]
print oddeven_one_out(nums1)
nums2 = [2, 4, 6, 8, 7]
print oddeven_one_out(nums2)
不过,定义的函数有一个小问题,那就是如果用户出错并输入一个所有数字都是偶数的列表,变量result将不会被定义,return将引发错误。在
这很容易解决,并且有助于理解return命令。当函数遇到return时,它将离开,而不执行下面的代码。使用此行为,我们可以重新定义函数:def oddeven_one_out(num_list):
odds = [i for i,num in enumerate(nums) if num % 2 == 1]
if len(odds)==1:
return odds[0]
evens = [i for i,num in enumerate(nums) if num % 2 == 0]
if len(evens)==1:
return evens[0]
现在,函数检查是否只有一个奇数,如果是奇数,则返回其位置,否则检查不同的奇数是否为偶数,如果是,则返回其位置。另外,如果用户调用oddeven_one_out([1,3,5,7]),结果将是None,因为函数不返回任何值。在