python: 在子列表中定位元素
python: locate elements in sublists
给定这些子列表
lst=[['a', 'b', 'c', 'd', 'e'], ['f', 'g', 'h']]
我正在尝试查找其元素的位置,
例如,字母 'a' 位于 0,0
但是这一行
print(lst.index('a'))
反而会产生以下错误:
ValueError: 'a' 不在列表
中
如果你的 list
有 depth=2
,你可以使用这个:
lst=[['a', 'b', 'c', 'd', 'e'], ['f', 'g', 'h']]
def fnd_idx(char, lst):
for x in range(len(lst)):
try:
idx = lst[x].index(char)
return [x,idx]
except ValueError:
pass
return None
输出:
>>> print(fnd_idx('a', lst))
[0, 0]
>>> print(fnd_idx('g', lst))
[1, 1]
>>> print(fnd_idx('z', lst))
None
试试这个功能(只需一行代码!):
def idx(lst, el):
return next(((i, sublst.index(el))
for i, sublst in enumerate(lst)
if el in sublst),
None)
例如:
>>> idx(lst, 'a')
(0, 0)
>>> idx(lst, 'c')
(0, 2)
你可以用 numpy 做到这一点,好处是你不必为嵌套列表的大小硬编码任何东西。你可以有数百个或 3 个,这会起作用!
lst=[['a', 'b', 'c', 'd', 'e'], ['f', 'g', 'h']]
arr = np.array(lst, dtype=object)
for x in arr:
try:
print (x.index('a'), x)
except:
pass
lst=[['a', 'b', 'c', 'd', 'c'], ['f', 'g', 'h']]
searchvalue = 'f'
counter = 0
for index in lst:
if searchvalue in index:
print(counter, index.index(searchvalue))
counter+=1
如果'a'可以出现在多个子列表中,而你想要每个子列表中的索引:
def GetIndexes(lst, val):
pos = []
for sublist in lst:
try:
idx = sublist.index(val)
pos.append(idx)
except:
pos.append(None)
return pos
在你的例子中:[0, None]
含义:在子列表 0 中,第一个 'a' 在索引 0 处。在子列表 1 中,没有 'a'.
您可以使用列表理解:
>>> lst=[['a', 'b', 'a', 'd', 'a'], ['f', 'g', 'a'], ['a','a','b']]
>>> [(i,j) for i in range(len(lst)) for j in range(len(lst[i])) if lst[i][j]=='a']
[(0, 0), (0, 2), (0, 4), (1, 2), (2, 0), (2, 1)]
给定这些子列表
lst=[['a', 'b', 'c', 'd', 'e'], ['f', 'g', 'h']]
我正在尝试查找其元素的位置, 例如,字母 'a' 位于 0,0 但是这一行
print(lst.index('a'))
反而会产生以下错误: ValueError: 'a' 不在列表
中如果你的 list
有 depth=2
,你可以使用这个:
lst=[['a', 'b', 'c', 'd', 'e'], ['f', 'g', 'h']]
def fnd_idx(char, lst):
for x in range(len(lst)):
try:
idx = lst[x].index(char)
return [x,idx]
except ValueError:
pass
return None
输出:
>>> print(fnd_idx('a', lst))
[0, 0]
>>> print(fnd_idx('g', lst))
[1, 1]
>>> print(fnd_idx('z', lst))
None
试试这个功能(只需一行代码!):
def idx(lst, el):
return next(((i, sublst.index(el))
for i, sublst in enumerate(lst)
if el in sublst),
None)
例如:
>>> idx(lst, 'a')
(0, 0)
>>> idx(lst, 'c')
(0, 2)
你可以用 numpy 做到这一点,好处是你不必为嵌套列表的大小硬编码任何东西。你可以有数百个或 3 个,这会起作用!
lst=[['a', 'b', 'c', 'd', 'e'], ['f', 'g', 'h']]
arr = np.array(lst, dtype=object)
for x in arr:
try:
print (x.index('a'), x)
except:
pass
lst=[['a', 'b', 'c', 'd', 'c'], ['f', 'g', 'h']]
searchvalue = 'f'
counter = 0
for index in lst:
if searchvalue in index:
print(counter, index.index(searchvalue))
counter+=1
如果'a'可以出现在多个子列表中,而你想要每个子列表中的索引:
def GetIndexes(lst, val):
pos = []
for sublist in lst:
try:
idx = sublist.index(val)
pos.append(idx)
except:
pos.append(None)
return pos
在你的例子中:[0, None]
含义:在子列表 0 中,第一个 'a' 在索引 0 处。在子列表 1 中,没有 'a'.
您可以使用列表理解:
>>> lst=[['a', 'b', 'a', 'd', 'a'], ['f', 'g', 'a'], ['a','a','b']]
>>> [(i,j) for i in range(len(lst)) for j in range(len(lst[i])) if lst[i][j]=='a']
[(0, 0), (0, 2), (0, 4), (1, 2), (2, 0), (2, 1)]