我正在生成一个包含12个随机数的列表:
nums = []
for num in range(12):
nums.append(random.randint(1,20))
然后我想搜索“nums”中的特定数字,比如“12”并使用if语句打印,如果它出现在列表中的哪个位置.像这样的东西:
if len(newNums) == 0:
print('No, 12 is not a part of this integer list')
elif len(newNums) < 2:
print('Yes, 12 is in the list at index', newNums[0])
else:
print('Yes, 12 is in the list at indices', newNums)
在这种情况下,’newNums’是我列出的位置列表,其中’12’在’nums’列表中.
我尝试了几个不同的东西,一个for循环,但没有让我到任何地方,然后我发现这里的东西看起来像这样:
newNums = (i for i,x in enumerate(nums) if x == 12)
但是,当我尝试打印时,它没有做我想要的.我一定是误解了它的目的.我对枚举函数的理解是它提供了值所在位置的索引,后跟值;例如:[0,1],[1,8],[2,6]等我正在阅读该代码的意思是:在列表中的一对[i,x]中给我i值(nums)if x == 12.
在过去的几周里我是python的新手,所以欢迎任何建议.我可能只是误解了代码的工作原理.
感谢您的时间.
解决方法:
这里唯一的问题是newNums:
newNums = (i for i,x in enumerate(nums) if x == 12) # a generator
是一个生成器,据我所知,你不能在生成器上调用len(..)并且打印不显示它的元素,而只是它是一个枚举器.
您可以使用列表推导来构建列表.您所要做的就是用方括号([..])替换圆括号((..)):
newNums = [i for i,x in enumerate(nums) if x == 12] # a list
# ^ ^
最后一个小小的说明:
My understanding of the
enumerate
function is that it provides the index of where the value is located, followed by the value; ex:[0,1]
,[1,8]
,[2,6]
etc.
你是正确的,除了你的语法似乎表明它发出列表,它发出元组,所以(0,1),(1,8),…但这在这个上下文中是一个小细节.