Python 在以用户定义的输入开始的列表中查找项的索引
给出如下列表:Python 在以用户定义的输入开始的列表中查找项的索引,python,list,Python,List,给出如下列表: lst = ['abc123a:01234', 'abcde123a:01234', ['gfh123a:01234', 'abc123a:01234']] 是否有一种方法可以快速返回以用户定义字符串开头的所有项目的索引,例如'abc' 目前,我只能使用以下方法返回完美匹配: print lst.index('abc123a:01234') 或者通过多个步骤找到以“abc”开头的所有元素,将这些元素保存到新列表中,并搜索原始列表中与这些元素的完美匹配 如果唯一快捷的方法是使用
lst = ['abc123a:01234', 'abcde123a:01234', ['gfh123a:01234', 'abc123a:01234']]
是否有一种方法可以快速返回以用户定义字符串开头的所有项目的索引,例如'abc'
目前,我只能使用以下方法返回完美匹配:
print lst.index('abc123a:01234')
或者通过多个步骤找到以“abc”开头的所有元素,将这些元素保存到新列表中,并搜索原始列表中与这些元素的完美匹配
如果唯一快捷的方法是使用正则表达式,那么我怎么还能拥有用户输入匹配内容的灵活性呢?您可以使用以下脚本/方法(我承认这是非常原始的):
您有一个嵌套列表。您的预期输出是什么?我没有尝试使用嵌套列表进行索引,但我希望使用[0][0]、[0][1][0][2][1],这是错误的吗?@PaulBarr:这会使问题变得有些复杂。您在这里的用例是什么?你想解决什么问题?为什么你的输入列表是任意嵌套的?是的,所以现在我们有进展了;你为什么不使用BioPython?例如,支持newick树。我自己不是BioPython用户,但看起来至少可以遍历这样的树(从而进行搜索);您甚至没有使用默认值,但正确的方法是使用
index=None
和如果index为None:index=[]
启动该列表。@MartijnPieters,请根据需要编辑我的代码。我承认它还是很生的。谢谢,您的代码没有正确处理更多嵌套级别;父路径不能处理多个索引。修复了这两个问题,并应用了一些PEP-8样式。
lst = ['abc123a:01234', 'abcde123a:01234', ['gfh123a:01234', 'abc123a:01234']]
user_in = 'abc'
def get_ind(lst, searchterm, path=None, indices=None):
if indices is None:
indices = []
if path is None:
path = []
for index, value in enumerate(lst):
if isinstance(value, list):
get_ind(value, searchterm, path + [index], indices)
elif value.startswith(searchterm):
indices.append(path + [index])
return indices
new_lst = get_ind(lst, user_in)
>>> print new_lst
[[0], [1], [2, 1]]