我必须回答的问题是:
实施带签名的功能
def expand_one_or(course_lists):
此函数列出了字符串course_lists的列表,以及 修改如下:
它在course_lists中找到第一个列表(称之为lis),其中出现“/”。
然后在lis中找到第一个“/”的坐标(比如说i)。
如果lis [i-1]和lis [i + 1]存在并且都是课程,则在课程列表中用两个新列表替换lis:与lis相同的列表但是 删除了lis [i]和lis [i + 1],以及与lis相同的列表
否则,所有发生的事情都是从lis中移除lis [i]。
例如,如果course_lists是:
[ ["CSC148H1", "/", "CSC150H1", ",", "CSC165H1", "/", "CSC240H1", "/", "CSC148H1", ";", "/"] ]
expand_one_or找到第一个“/”,并将course_lists修改为
[ ["CSC148H1", ",", "CSC165H1", "/", "CSC240H1", "/", "CSC148H1", ";", "/"], ["CSC150H1", ",", "CSC165H1", "/", "CSC240H1", "/", "CSC148H1", ";", "/"] ]
如果我们在结果列表中第二次运行expand_one_or,我们 获得
[ ["CSC148H1", ",", "CSC165H1", "/", "CSC148H1", ";", "/"], ["CSC148H1", ",", "CSC240H1", "/", "CSC148H1", ";", "/"] ["CSC150H1", ",", "CSC165H1", "/", "CSC240H1", "/", "CSC148H1", ";", "/"] ]
我以前用的代码是:
c = [ ["CSC148H1", "/", "CSC150H1", ",", "CSC165H1", "/", "CSC240H1", "/",
"CSC148H1", ";", "/"] ]
d = [['CSC148H1', ',', 'CSC165H1', '/', 'CSC240H1', '/', 'CSC148H1', ';', '/'], ['CSC150H1', ',', 'CSC165H1', '/', 'CSC240H1', '/', 'CSC148H1', ';', '/']]
def expand_one_or(course_lists):
accumulator = []
k = 0
for lis in course_lists:
for i in range(len(lis)):
if lis[i] == '/' and i != len(lis) and k == 0:
if lis[i - 1].isalnum() and lis[i + 1].isalnum():
k = 1
list1 = lis[:i] + lis[(i + 2):]
list2 = lis[i + 1:]
accumulator.append(list1)
accumulator.append(list2)
else:
lis.remove(lis[i])
k = 1
return accumulator
此代码用于第一次迭代,但不适用于第二次迭代。
因此,例如,如果我们为函数提供如下列表:
[ ["CSC148H1", "/", "CSC150H1", ",", "CSC165H1", "/", "CSC240H1", "/",
"CSC148H1", ";", "/"] ]
它应该给出输出
[['CSC148H1', ',', 'CSC165H1', '/', 'CSC240H1', '/', 'CSC148H1', ';', '/'], ['CSC150H1', ',', 'CSC165H1', '/', 'CSC240H1', '/', 'CSC148H1', ';', '/']]
现在,如果我们再次将此输出代码放入函数中,它应该给出:
[ ["CSC148H1", ",", "CSC165H1", "/", "CSC148H1", ";", "/"],
["CSC148H1", ",", "CSC240H1", "/", "CSC148H1", ";", "/"]
["CSC150H1", ",", "CSC165H1", "/", "CSC240H1", "/", "CSC148H1", ";", "/"] ]
问题是我第一次运行该功能时它给了我正确的输出。然而,当我第二次运行它时,它给了我:
[['CSC148H1', ',', 'CSC165H1', '/', 'CSC148H1', ';', '/'], ['CSC240H1', '/', 'CSC148H1', ';', '/']]
这是错误的输出。
答案 0 :(得分:0)
试试这个:
def split_list(l, i):
return [l[:i] + l[i+2:], l[:i-1] + l[i+1:]]
def expand_one_or(course_lists):
k = 0
accumulator = []
for lis in course_lists:
if k == 0 and '/' in lis:
k = 1
i = lis.index('/')
if i > 0 and i < len(lis)-1 and lis[i-1].isalnum() and lis[i+1].isalnum():
accumulator += split_list(lis, i)
k = 1
else:
accumulator.append(lis[:i] + lis[i+1:])
else:
accumulator.append(lis)
return accumulator