在列表列表

时间:2016-11-01 15:23:45

标签: python list python-3.x tuples

我需要编写一个函数,以列表列表中所有字母的格式('字母',row,col)创建元组。我意识到我可以结合我已经编写的两个功能来实现这一目标。我写的一个函数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']]

2 个答案:

答案 0 :(得分:1)

如上所述,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')

答案 1 :(得分:-1)

[(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 += 1