我有一个元素列表,只有一个(奇数或偶数)与其他元素不同,我想在列表中找到它的索引。
例如:
nums = [2, 4, 6, 8, 7] or nums = [1, 3, 4, 5]
#how using only "for" loop not def (it is too difficult for me yet) do it?
for i,num in enumerate (nums):
if num % 2 == 1 and ... # I was thinking here of using a count function (I do not know how to tell python that in the same time it should be unique element
print (i)
elif if num % 2 == 0 and ...
print (i)
请解释一下因为我是Python的初学者。
答案 0 :(得分:2)
很难理解问题的范围,但如果你只是想要多数投票(就像在所有数字中投票支持该组甚至是奇数一样,那么你可能会这样做:
nums1 = [2,4,6,7,8]
nums2 = [2,1,3,5,7]
def get_one(nums):
nums_bin = [i%2 for i in nums]
if sum(nums_bin)>1:
return nums_bin.index(0)
return nums_bin.index(1)
print nums1, get_one(nums1)
print nums2, get_one(nums2)
# outputs
# [2, 4, 6, 7, 8] 3
# [2, 1, 3, 5, 7] 0
答案 1 :(得分:0)
nums = [2, 4, 6, 8, 7]
#With the following line you take modulo 2 for each element so nums will become [0, 0, 0, 0, 1]
nums = [x%2 for x in nums]
#you still need to figure out, if the majority of elements was even or odd
#you can do that by checking the sum of the array. If it is 1, all but one element were even, if it is len(nums)-1 all but one were odd.
sum_of_nums = sum(nums)
for i in range(len(nums)):
#If the sum is ==1 you are looking for the one element that is 1
if nums[i] == 1 and sum_of_nums == 1:
print(i)
#If the sum is len(nums)-1 you are looking for the one element that is 0
if nums[i] == 0 and sum_of_nums == len(nums)-1:
print(i)
现在关于不使用def
:
def
用于定义类似于您从数学中知道的函数。 f(x)=x+1
将以f(1)=2 , f(2)=3
与def = define
一个输入(Math -> the x, here -> an array of Integers
)并对其执行某些操作(Math -> Add 1, here -> find the element
)的函数类似的方式适用于def functionName (inputParameter):
语法为def yourFunction (nums):
for i in range(len(nums)):
#If the sum is ==1 you are looking for the one element that is 1
if nums[i] == 1 and sum_of_nums == 1:
print(i)
#If the sum is len(nums)-1 you are looking for the one element that is 0
if nums[i] == 0 and sum_of_nums == len(nums)-1:
print(i)
代码如上:
nums1 = [2, 4, 3]
您现在可以执行以下操作:
nums2 = [3, 5, 8]
yourFunction(nums1)
然后致电:
2
,它将打印yourFunction(nums2)
2
,它将打印dismiss
答案 2 :(得分:0)
我将尝试逐步解释这个问题,并且根据要求,我将首先尝试避免定义函数或列表推导,并尝试解释如何从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的列表:
if len(odds)==1:
print odds[0]
elif len(evens)==1: # or else:
print evens[0]
有一个elif
而不是其他来检查确实只有一个号码与其他号码不同,但它可以用else
代替。
现在简化并使代码更加pythonic。
使用列表推导可以在同一行中创建赔率和均衡列表。因此,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
,因为该函数不会返回任何值。