sublist = [[32,999,15,329,679],[1738,100,55,1800,1469],["bruges","manchester","bristol","edinburgh","barcelona"]["Vienna","Stockholm","Berlin",Prague,"Dublin"]]
例如,这些子列表故意将字符串和整数混合在一起,但又有6个子列表。有没有一种方法可以搜索“ Vienna”并返回第4个子列表中的“ Vienna”中的4。
非常感谢
答案 0 :(得分:0)
这是一个可能的解决方案:
result = next((i for i, lst in enumerate(sublist) if 'Vienna' in lst), None)
在特定情况下,返回3
。如果找不到合适的子列表(即,没有子列表包含“维也纳”),则返回None
。
答案 1 :(得分:0)
如果只有一个级别,则可以使用in
关键字循环浏览此列表并检查元素是否在此列表中。
但是,如果您嵌套了具有多个级别的子列表,则可能要使用递归函数来扫描所有列表。下面的函数finder()
会扫描所有嵌套列表,并返回首次遇到该元素的列表的索引:
sublist = [[32,999,15,329,679],
[1738,100,55,1800,1469],
["bruges","manchester","bristol","edinburgh","barcelona"],
["Vienna","Stockholm","Berlin","Prague","Dublin"],
["Dog",["Cat","Parrot"]]]
def finder(nested,element):
for i in range(len(nested)):
if type(nested[i])==list:
f = finder(nested[i],element)
if type(f)==list:
return [i]+f
elif nested[i]==element:
return [i]
print(finder(sublist,"Vienna"))
print(finder(sublist,"Parrot"))
#Output:
#[3, 0]
#[4, 1, 1]
输出表示“维也纳”位于列表3中的第0个元素。元素“ Parrot”在列表1的列表4中,即第1个元素。
答案 2 :(得分:0)
您可以使用枚举功能优雅地解决您的问题。但是,请记住,Python对数组使用基于0的索引,因此,如果要为“第四子列表”返回4,则需要添加1。
def find(nest, elem):
for idx, lst in enumerate(nest):
if elem in list:
return idx
sublist = [
[32,999,15,329,679],
[1738,100,55,1800,1469],
["bruges","manchester","bristol","edinburgh","barcelona"],
["Vienna","Stockholm","Berlin","Prague","Dublin"]]
print(find(sublist, "Vienna"))
要返回4:
def find(nest, elem):
for idx, lst in enumerate(nest):
if elem in list:
return idx + 1