繁体   English   中英

如何在python中搜索列表并打印我的条件所在的列表中的哪个位置?

[英]How can I search a list in python and print at which location(s) in that list my criteria is located?

我正在生成一个包含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)    

但是,当我尝试打印时,它没有做我想要的。 我一定是误解了它的目的。 我对enumerate函数的理解是它提供了值所在位置的索引,后跟值; 例如: [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
#         ^                                       ^

最后一个小小的说明:

我对enumerate函数的理解是它提供了值所在位置的索引,后跟值; 例如: [0,1][1,8][2,6]

你是正确的,除了你的语法似乎表明它发出列表 ,它发出元组 ,所以(0,1)(1,8) ,...但这在这个上下文中是一个小细节。

您的代码的小问题是

newNums = (i for i,x in enumerate(nums) if x == 12)  

是一个生成器 (例如len不会对它起作用)。 你想要的是一个列表(理解)

newNums = [i for i,x in enumerate(nums) if x == 12]

有了这个,你的其余代码就像你期望的那样工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM