我正在编写一个需要浏览列表列表的函数,收集大写或小写的所有字母,然后返回一个列表,其中包含按顺序找到的每个字母中的1个字母。如果该字母在列表列表中多次出现,则该函数只需在第一次看到该字母时报告。
例如,如果列表列表是[['。','M','M','N','N'],['。','。','。','。 ','g'],['B','B','B','。','g']]然后函数输出应该返回[“M”,“N”,“g”,“B” “]。
到目前为止,我所拥有的代码似乎可以正常工作,但似乎并没有起作用。任何帮助表示赞赏
OnDestroy
答案 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)
这也可以使用chain,OrderedDict和isalpha完成,如下所示
>>> 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食谱,因为我最好的朋友,我建议将所有这些食谱放在一个随时可用的文件中,它们总是很有帮助