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

Posted

技术标签:

【中文标题】如何在 python 中搜索列表并打印我的条件位于该列表中的哪个位置?【英文标题】:How can I search a list in python and print at which location(s) in that list my criteria is located? 【发布时间】:2017-06-06 14:11:19 【问题描述】:

我正在生成一个包含 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] 等。我正在阅读该代码的意思是:如果 x == 12,请在列表 (nums) 内的一对 [i,x] 中给我 i 值。

在过去的几周内,我是 python 的新手,所以欢迎任何建议。我可能只是误解了代码的工作原理。

感谢您的宝贵时间。

【问题讨论】:

【参考方案1】:

这里唯一的问题是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
#         ^                                       ^

最后一个小提示:

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

你是对的,除了你的语法似乎表明它发出lists,它发出tuples,所以(0,1)(1,8),...但是在这种情况下,这是一个小细节。

【讨论】:

【参考方案2】:

你的代码的小问题是

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

是generator(例如len 将无法使用它)。你想要的是list (comprehension):

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

这样,您的代码的其余部分就可以按您的预期工作。

【讨论】:

以上是关于如何在 python 中搜索列表并打印我的条件位于该列表中的哪个位置?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Listview 中搜索使用 Fragment 布局

如何将我的打印语句保存在列表中? Python [关闭]

怎么用python搜索文本并筛选出来?

Python re.findall 将输出打印为列表而不是字符串

解析python中的单词列表

将 for 循环中的多个打印输出值存储到列表或变量中