我需要编写一个函数,以列表列表中所有字母的格式(“信函”、“行、行”)的形式创建一个元组。我意识到我可以结合我已经写好的两个函数来完成这个任务。我编写的一个函数get_letters(lst)从列表中提取所有字母,而我编写的另一个函数提取行和列。
必须有一种方法来组合这两个功能来完成这个目标,而不需要创建一个新的功能,但我不知道我将如何实现它。下面是这两个函数的代码:
def get_letters(lst):
letters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
newlst = []
for sublist in lst:
for i in sublist:
if i in symbols and i not in newlst:
newlst.append(i)
#Example output: (1, 0)
return newlst
def find_letter(letter, lst):
for i in range(len(lst)):
for j in lst[i]:
if j == letter:
return i ,lot[i].index(j)
#Example output: ['A']
#New function example output: [('A', 1, 0)]
#Example input for both above functions: lst2 =
#[['.','M','M','H','H'],
#['A','.','.','.','f'],
#['B','C','D','.','f']]发布于 2016-11-01 15:35:33
如前所述,enumerate绝对是这里的出路。第一个函数实际上做得不多,第二个函数没有充分利用有用的Python函数。
以下代码段将在列表中找到字母的第一个实例,并返回其行和列索引:
def letter_find(letter, lst):
for y, row in enumerate(lst):
if letter in row:
return letter, y, row.index(letter)用途如下:
lot2 = [['.','M','M','H','H'],
['A','.','.','.','f'],
['B','C','D','.','f']]
>>> print(letter_find('A', lot2))
('A', 1, 0)请注意,这不检查输入是否实际上是一个字母。如果您只想接受一个字母,您可以在函数的顶部添加这样的内容:
if not letter.isalpha():
raise ValueError('Only letters are accepted')发布于 2016-11-01 15:38:49
[(letter, i, j) for i, sublist in enumerate(list_of_list) for j, letter in enumerate(sublist) if letter.isalpha()]是用enumerate实现这一目的的一种方法。如果您由于某些原因不能使用enumerate,则只需滚动您自己的:
def not_enumerate_i_swear(iterable):
i = 0
for item in iterable:
yield (i, item)
i += 1https://stackoverflow.com/questions/40363142
复制相似问题