我有一个包含列表组合的列表,每个列表包含六个元素,即[(0,0,0,0,0,0,0)]。值可以是0-2之间的所有值。我想要一个可以在列表中找到特定组合并返回该组合列表中索引的函数。我自己编写了一个小函数,只能返回True或False。我的问题是,即使我知道它在那里,它似乎也根本找不到该元素。
def sampling_with_posterior(comb):
if comb in combinations2:
return True
else:
return False
我忘记了什么,有些空白还是什么?预先感谢!
答案 0 :(得分:1)
Python的列表中有一种已经为您完成的方法。
您可以使用方法.index
找到给定组合的位置:
def sampling_with_posterior(comb):
try:
return combinations2.index(comb)
except ValueError:
# perform best action for when the value does not exist.
至于您现有的代码没有找到该值,请记住,list
不是Python中唯一的操作系统序列-您说的是列表,但是您的代码显示了一个由{{1}分隔的序列}而不是()
-在Python中是[]
,而不是列表。两种方法都可以,但是您必须使用相同类型的对象来搜索遏制(以及查找其索引)。
一种实现方法是在搜索时将序列强制为一种(然后确保列表中的元素属于同一类型):
tuple
当您开始使用它时,让我们来谈谈更严肃的事情:这将适用于列表,但是还有其他一些数据结构可能最适合您:如果您只需要知道组合是否存在,则可以def sampling_with_posterior(comb):
return tuple(comb) in combinations2
# The result of the 'in' operator is already "True" or "False"
# Your 'if' statement is redundant.
更合适。在Python set
中使用in
运算符进行搜索的速度更快,因为它不依赖于数据的大小。但是要使用集合代替列表,您的组合元素实际上必须是元组-而不是列表。集合是无序的,但是集合中的组合没有“位置”。导致我们...
最后:为什么要使用该索引?要在另一个列表中搜索其他数据,这些数据的顺序必须相同?如果您有必须与这6个元组组合中的每个组合相关联的数据,则可以使用字典,其中每个组合的对应值(用作键)已经是所需的数据。 set
运算符也很快速(例如集合),不需要间接索引来检索其他数据,这将很难保持同步:
in
(而且无需检查单独的函子,因为combinations2 = {
(0,0,0,0,0,0): "data associated with this",
(0,0,0,1,0,0): "data associated with that",
...
}
已经返回了True或False,因为{>