我试图创建一个函数来合并两个列表,并根据只包含我想要的标签的年份返回排序的输出,例如:
InputLists = [List1, List2]
List1 = ["2010 11 A", "2011 15 B", "2007 19 A", "2012 16 C"]
List2 = ["2015 8 A", "2016, 7 C", "2011 4 B"]
TagLists = ["A", "C"]
sorted_output = my_function(InputLists, TagLists)
sorted_output = ["2007 19 A", "2010 11 A", "2012 16 C", "2015 8 A", "2016 7 C"]
这样的函数是什么样的?
下面的函数应该可以工作:
def my_function(il, tl):
combined = il[0] + il[1] #combine both input lists
filtered = [] #create filtered list
for val in combined: #iterate through elements in combined list
if val[-1] in tl: #checking if last letter is in tagged list
filtered.append(val) #if so, add to filtered list
filtered.sort(key = lambda x: (int)(x[:4])) #sort by year
return filtered #returning filtered list (our answer)
List1 = ["2010 11 A", "2011 15 B", "2007 19 A", "2012 16 C"]
List2 = ["2015 8 A", "2016, 7 C", "2011 4 B"]
InputLists = [List1, List2]
TagLists = ["A", "C"]
sorted_output = my_function(InputLists, TagLists)
print(sorted_output)
输出:
['2007 19 A', '2010 11 A', '2012 16 C', '2015 8 A', '2016, 7 C']
首先,我们将InputLists
,List1
和List2
的两个列表合并。然后,我们创建一个过滤列表,如果最后一个字母在tl
(我们的TagLists
)中,它只会添加combined
的元素。然后,我们只按年份排序,或者按每个元素的前4个字符的整数值排序。
如果你需要任何进一步的帮助或澄清,请告诉我!:)
如果您只有两个列表,您可以将InputLists = [List1, List2]
替换为InputLists = List1 + List2
,然后使用:
def is_contain_tag(input, tags):
for tag in tags:
if tag in input:
return True
return False
def my_function(InputLists, TagLists):
return sorted([input for input in InputLists if is_contain_tag(input, TagLists)])
同样,如果你知道标签是最后一个字符,你可以用:
代替is_contain_tag
def is_contain_tag(input, tags):
return len(input) > 1 and input[-1] in tags
还要注意,如果您不知道年份是否出现在开头,则需要处理它。
这将适用于提供给lists
参数的列表中的任意数量的字符串列表,以及作为列表提供给tags
参数的任意数量的各种长度和字符的字符串。任何标记都被认为是用空白与字符串的其余部分分开的。
def fun(lists,tags):
flat_list=[]
result=[]
for i in lists: #making one-level list
flat_list+=i
for i in flat_list:
if any(i.endswith(' '+tag)==True for tag in tags):
result[:0]=[i] #adding to the beginning
else:
result.append(i) #adding to the end
return result
这就是函数的样子。代码应该使用循环来遍历标签列表以检查各个标签是否在两个列表中,这就是为什么两个循环列表都在标签列表
的列表下面的原因。def merge_list(lst1,lst2,Taglist):
sorted_output =[]
for x in range(len(Taglist)):# loop for the tag list
for j in range(len(lst1)):# loop for the list 1
if Taglist[x] in lst1[j]:#this compares items
sorted_output.append(lst1[j])
for i in range(len(lst2)):# loop for the list 2
if Taglist[x] in lst2[i]:#this compares items
sorted_output.append(lst2[i])
sorted_output = sorted(sorted_output)
return sorted_output
List1 = ["2010 11 A", "2011 15 B", "2007 19 A", "2012 16 C"]
List2 = ["2015 8 A", "2016, 7 C", "2011 4 B"]
TagLists = ["A", "C"]
x = merge_list(List1,List2,TagLists)
print(x)