获取元组元组中元素的索引
Get the index of an element in a tuple of tuples
这与许多类似的问题有关,例如
Check if element exists in tuple of tuples
但是我不仅要检查它是否存在,还要检查它在哪个元组中,例如。索引。数据结构(来自第 3 方库)始终是元组的元组。 (它不能嵌套得更深)。
我想要的 return 值是元素所在的元组的索引。我知道我肯定可以将它与 for 循环一起破解,但是有没有更好的方法来获取索引?
您可以使用 next and enumerate built-in 函数来获得索引。
您可以通过以下方式使用它:
def get_index_of_containing_tuple(lst: tuple, item):
try:
return next(ind for ind, tup in enumerate(lst) if item in tup)
except Exception:
return -1
使用示例:
a = (('a', 'b'), ('c', 'd'))
get_index_of_containing_tuple(a, 'a') # returns 0
get_index_of_containing_tuple(a, 'c') # returns 1
get_index_of_containing_tuple(a, 'd') # returns 1
get_index_of_containing_tuple(a, 123) # returns -1
这是一个没有 for
循环的解决方案。包含外部元组 a
中查询元素的内部元组的索引作为列表返回
list(filter(lambda x: x != -1, map(lambda enum: enum[0] if 'queried_element' in enum[1] else -1, enumerate(a)))
对于嵌套元组中的重复元组元素,您可以使用单个 for 循环轻松管理。
example = (('apple','orange'),('orange','banana'),('banana','mango'))
def element_index(iterable, key = None):
index = set()
index_add = index.add
for ix, element in enumerate(iterable):
if key in element:
index_add(ix)
return index
nth_tuple(example, key = 'orange')
>> {0, 1}
index
方法类似地查找每个元素,直到找到第一个元素。我认为只要适合您的需要并且嵌套元组不是那么大,for 循环就可以正常工作。
这与许多类似的问题有关,例如
Check if element exists in tuple of tuples
但是我不仅要检查它是否存在,还要检查它在哪个元组中,例如。索引。数据结构(来自第 3 方库)始终是元组的元组。 (它不能嵌套得更深)。
我想要的 return 值是元素所在的元组的索引。我知道我肯定可以将它与 for 循环一起破解,但是有没有更好的方法来获取索引?
您可以使用 next and enumerate built-in 函数来获得索引。 您可以通过以下方式使用它:
def get_index_of_containing_tuple(lst: tuple, item):
try:
return next(ind for ind, tup in enumerate(lst) if item in tup)
except Exception:
return -1
使用示例:
a = (('a', 'b'), ('c', 'd'))
get_index_of_containing_tuple(a, 'a') # returns 0
get_index_of_containing_tuple(a, 'c') # returns 1
get_index_of_containing_tuple(a, 'd') # returns 1
get_index_of_containing_tuple(a, 123) # returns -1
这是一个没有 for
循环的解决方案。包含外部元组 a
中查询元素的内部元组的索引作为列表返回
list(filter(lambda x: x != -1, map(lambda enum: enum[0] if 'queried_element' in enum[1] else -1, enumerate(a)))
对于嵌套元组中的重复元组元素,您可以使用单个 for 循环轻松管理。
example = (('apple','orange'),('orange','banana'),('banana','mango'))
def element_index(iterable, key = None):
index = set()
index_add = index.add
for ix, element in enumerate(iterable):
if key in element:
index_add(ix)
return index
nth_tuple(example, key = 'orange')
>> {0, 1}
index
方法类似地查找每个元素,直到找到第一个元素。我认为只要适合您的需要并且嵌套元组不是那么大,for 循环就可以正常工作。