尝试返回列表行中找到的字符串列表。但是顺序必须从左到右从顶行到最低而不返回重复。我不知道该怎么办。如果字母A到Z与列表匹配,我是否需要为字母A到Z制作IF语句,然后将它们附加到新列表中?
def get_locations(lst):
new_lst = [] # New list?
for i in range(len(lst)):
if 'A' lst[i] <= 'Z' or 'a' <= lst[i] <= 'z': #If strings are A to Z
new_lst.append # Add to new list?
return new_lst
列表示例:它应该像这样返回get_locations(lst)→[“a”,“B”,“A”,“z”,“C”]
lst1 = [['.', '.', 'a', 'B'],
['.', '.', 'a', '.'],
['A', '.', '.', 'z'],
['.', '.', '.', 'z'],
['.', '.', 'C', 'C']]
答案 0 :(得分:3)
让我们逐行完成这个功能:
new_lst = [] # New list?
是的,它会创建一个新列表。
for i in range(len(lst)):
虽然这是有效的,但很少有理由在Python中迭代列表索引。您可以改为遍历元素。此外,这是一个列表列表,因此也应该处理:
for sublist in lst:
for character in sublist:
之后使用character
代替lst[i]
。
if 'A' lst[i] <= 'Z' or 'a' <= lst[i] <= 'z': #If strings are A to Z
'A' lst[i]
存在语法错误。否则,如果character
实际上是一个字符,这可能会起作用。如果它是一个较长的字符串,它可能会产生意想不到的结果(取决于您的期望):
if 'A' <= character <= 'Z' or 'a' <= character <= 'z':
所以,发现了一个有趣的角色。将其添加到结果?
new_lst.append # Add to new list?
应该调用该函数:
new_lst.append(character)
顺便说一下,无论是否已经在new_lst
中,都会附加该字符。我收集它应该只添加一次角色:
if character not in new_lst:
new_lst.append(character)
下一行返回列表,但为时过早:
return new_lst
它不应该缩进。它应该在循环之外,以便在所有循环之后返回结果。
答案 1 :(得分:0)
我在理解你的意思时遇到了很多麻烦,但假设我已经弄清楚了,你就不会太离谱了:
def get_locations(lst):
new_lst = [] # New list?
for row in lst:
for letter in row:
if ('A' <= letter <= 'Z' or 'a' <= letter <= 'z') and letter not in new_lst: #If strings are A to Z
new_lst.append(letter) # Add to new list?
return new_lst
答案 2 :(得分:0)
import re
def get_locations(lst):
new_lst = [] # New list? Yes!
# Iterate directly over "flattened" list. That involves confusing
# nested list comprehension. Look it up, it's fun!
for i in [e for row in lst for e in row]:
# using regular expression gives more flexibility - just to show off :)
if re.match('^[a-zA-Z]+$', i) and i not in new_lst: #deal with duplicates
new_lst.append(i) # Add to new list? yes!
return new_lst # corrected indentation
lst1 = [['.', '.', 'a', 'B'],
['.', '.', 'a', '.'],
['A', '.', '.', 'z'],
['.', '.', '.', 'z'],
['.', '.', 'C', 'C']]
print(get_locations(lst1))
答案 3 :(得分:0)
如果您对排序并不十分关注,那么以下声明将足以将冗长的方法放在一边:
ans = {j for i in lst for j in i if j!='.'}
如果必须维护订单,那么您可以考虑使用以下方法:
def get_locations(lst):
ans=[]
for i in lst:
for j in i:
if (j is not '.') and (j not in ans):
ans.append(j)
return ans
您还可以使用以下生成器版本来解决您的问题:
def get_locations(lst):
ans=[]
for i in lst:
for j in i:
if (j is not '.') and (j not in ans):
ans.append(j)
yield j
答案 4 :(得分:0)
非常简单。 string.ascii_letters
是了解所有字母a-Z
import string
def get_chars(lst):
new_list = []
for nested_list in lst:
for char in nested_list:
if char not in new_list and char in string.ascii_letters:
new_list.append(char)
return new_list
然后:
>>> get_chars(lst1)
['a', 'B', 'A', 'z', 'C']