Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/magento/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 第二次迭代不';行不通_Python - Fatal编程技术网

Python 第二次迭代不';行不通

Python 第二次迭代不';行不通,python,Python,我必须回答的问题是: 使用签名实现函数 def expand_one_or(course_lists): 此函数获取字符串列表,以及 修改如下: 它在出现“/”的课程列表中查找第一个列表(称为lis) 然后找到lis中第一个“/”的坐标(比如i) 如果lis[i-1]和lis[i+1]存在并且都是课程,则课程_列表中的lis将替换为两个新列表:一个与lis相同但具有 lis[i]和lis[i+1]已删除,列表与lis相同,但具有 lis[i]和lis[i-1]已删除 否则,将从lis中删除l

我必须回答的问题是:

使用签名实现函数

def expand_one_or(course_lists):
此函数获取字符串列表,以及 修改如下:

  • 它在出现“/”的课程列表中查找第一个列表(称为lis)

  • 然后找到lis中第一个“/”的坐标(比如i)

  • 如果lis[i-1]和lis[i+1]存在并且都是课程,则课程_列表中的lis将替换为两个新列表:一个与lis相同但具有 lis[i]和lis[i+1]已删除,列表与lis相同,但具有 lis[i]和lis[i-1]已删除

  • 否则,将从lis中删除lis[i]

例如,如果课程列表为:

[ ["CSC148H1", "/", "CSC150H1", ",", "CSC165H1", "/", "CSC240H1", "/",
"CSC148H1", ";", "/"] ]
展开或查找第一个“/”,并将课程列表修改为

[ ["CSC148H1", ",", "CSC165H1", "/", "CSC240H1", "/", "CSC148H1", ";", "/"],
["CSC150H1", ",", "CSC165H1", "/", "CSC240H1", "/", "CSC148H1", ";", "/"] ]
如果我们在结果列表上运行expand_一次或第二次,我们 得到

我用来做这件事的代码是:

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', ';', '/']]
这是错误的输出。

请尝试以下操作:

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
def拆分列表(l,i):
返回[l[:i]+l[i+2:],l[:i-1]+l[i+1:]
def展开一个或(课程列表):
k=0
累加器=[]
对于课程列表中的lis:
如果lis中的k==0且“/”:
k=1
i=列表索引(“/”)
如果i>0且i
您可以发布样本输出吗?你所说的“不起作用”具体是什么意思。您的实现有很多问题。例如,它在分解找到的第一行后不会退出(这可能是它第二次失败的原因)。此外,内部循环中的i永远不会等于len(lis)“此代码在第一次迭代中起作用,但在第二次迭代中不起作用。”。哪个循环的迭代?发生这种情况时,课程列表是什么?等一下,我会编辑整个问题。当我尝试这段代码时,它会说“TypeError:只能连接列表(而不是“str”)以列出您使用的输入?当我尝试使用您的输入时,它提供了预期的输出。是否确实要将列表列表作为输入传递给
展开\或
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