首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在列表中创建字母元组及其行和列

在列表中创建字母元组及其行和列
EN

Stack Overflow用户
提问于 2016-11-01 15:23:45
回答 2查看 614关注 0票数 0

我需要编写一个函数,以列表列表中所有字母的格式(“信函”、“行、行”)的形式创建一个元组。我意识到我可以结合我已经写好的两个函数来完成这个任务。我编写的一个函数get_letters(lst)从列表中提取所有字母,而我编写的另一个函数提取行和列。

必须有一种方法来组合这两个功能来完成这个目标,而不需要创建一个新的功能,但我不知道我将如何实现它。下面是这两个函数的代码:

代码语言:javascript
复制
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']]
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-11-01 15:35:33

如前所述,enumerate绝对是这里的出路。第一个函数实际上做得不多,第二个函数没有充分利用有用的Python函数。

以下代码段将在列表中找到字母的第一个实例,并返回其行和列索引:

代码语言:javascript
复制
def letter_find(letter, lst):
    for y, row in enumerate(lst):
        if letter in row:
            return letter, y, row.index(letter)

用途如下:

代码语言:javascript
复制
lot2    =      [['.','M','M','H','H'],
               ['A','.','.','.','f'],
               ['B','C','D','.','f']]

>>> print(letter_find('A', lot2))
('A', 1, 0)

请注意,这不检查输入是否实际上是一个字母。如果您只想接受一个字母,您可以在函数的顶部添加这样的内容:

代码语言:javascript
复制
if not letter.isalpha():
    raise ValueError('Only letters are accepted')
票数 1
EN

Stack Overflow用户

发布于 2016-11-01 15:38:49

代码语言:javascript
复制
[(letter, i, j) for i, sublist in enumerate(list_of_list) for j, letter in enumerate(sublist) if letter.isalpha()]

是用enumerate实现这一目的的一种方法。如果您由于某些原因不能使用enumerate,则只需滚动您自己的:

代码语言:javascript
复制
def not_enumerate_i_swear(iterable):
    i = 0
    for item in iterable:
        yield (i, item)
        i += 1
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40363142

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档