检索并返回列表列表中的字母的函数

时间:2016-10-31 17:14:09

标签: python list python-3.x return letters

我正在编写一个需要浏览列表列表的函数,收集大写或小写的所有字母,然后返回一个列表,其中包含按顺序找到的每个字母中的1个字母。如果该字母在列表列表中多次出现,则该函数只需在第一次看到该字母时报告。

例如,如果列表列表是[['。','M','M','N','N'],['。','。','。','。 ','g'],['B','B','B','。','g']]然后函数输出应该返回[“M”,“N”,“g”,“B” “]。

到目前为止,我所拥有的代码似乎可以正常工作,但似乎并没有起作用。任何帮助表示赞赏

OnDestroy

3 个答案:

答案 0 :(得分:3)

以现有代码为基础:

import string

def get_symbols(lot):
    symbols = string.ascii_lowercase + string.ascii_uppercase
    newlot = []

    for sublot in lot:
        for x in sublot:
            if x in symbols and x not in newlot:
                newlot.append(x)

    return newlot

print get_symbols([['.', 'M', 'M', 'N', 'N'],['.', '.', '.', '.', 'g'], ['B', 'B', 'B', '.','g']])

使用string让字母更整齐一些。然后我们遍历提供的每个列表(sublot的每个lot),然后对于每个元素(x),我们检查它是否都在我们的所有字母列表中并且<在我们找到的信件列表中强>不。如果是这种情况,我们将其添加到输出中。

答案 1 :(得分:1)

您的代码存在一些问题。您在错误的位置使用[ { id: 1, name: 'SubItem 1' }, { id: 2, name: 'SubItem 2' }, { id: 3, name: 'SubItem 3' }, { id: 4, name: 'SubItem 4' } ] ,仅在外部列表上循环(而不是在子列表中的项目上),并且您将return追加到symbols而不是匹配的项目。< / p>

newlot

您可以使用双def get_symbols(lot): symbols = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ' # You should define this OUTSIDE of the function newlot = [] for i in lot: # You are iterating over the outer list only here if i == symbols: # == does not check if an item is in a list, use `in` here newlot.append(symbols) # You are appending symbols which is the alphabet return newlot # This will cause your function to exit as soon as the first iteration is over else: return None # No need for this 循环并使用for来检查该字符是否在in中并且还不在symbols中:

newlot

这是列表的输出:

l = [['.', 'M', 'M', 'N', 'N'],['.', '.', '.', '.', 'g'], ['B', 'B', 'B', '.','g']]
symbols = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'

def get_symbols(lot):

    newlot = []

    for sublist in lot:
        for i in sublist:

            if i in symbols and i not in newlot:
                newlot.append(i)

    return newlot

答案 2 :(得分:0)

这也可以使用chainOrderedDictisalpha完成,如下所示

>>> from collections import OrderedDict
>>> from itertools import chain
>>> data = [['.', 'M', 'M', 'N', 'N'],['.', '.', '.', '.', 'g'], ['B', 'B', 'B', '.','g']]
>>> temp = OrderedDict.fromkeys(chain.from_iterable(data))
>>> [x for x in temp if x.isalpha()]
['M', 'N', 'g', 'B']
>>> 

chain.from_iterable将起到与在一个

中连接所有子列表相同的目的

由于订单是相关的,OrderedDict将通过删除重复项来提供与set相同的目的,同时保留添加的对象的第一个实例的顺序。 fromkeys类方法将创建一个具有给定键和相同值的字典,默认情况下为None,因为我们不关心它,因为我们的目的是订购者集

最后,isalpha将告诉您字符串是否为字母

您还可以查看unique_everseen食谱,因为我最好的朋友,我建议将所有这些食谱放在一个随时可用的文件中,它们总是很有帮助