如何在 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
# ^ ^
最后一个小提示:
我对@987654327@函数的理解是,它提供了值所在位置的索引,后面是值;例如:
[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 布局