Python 如果已添加上一个元素,则在列表中添加下一个元素

Python 如果已添加上一个元素,则在列表中添加下一个元素,python,list,if-statement,append,iteration,Python,List,If Statement,Append,Iteration,我想从一个列表中附加下一个元素,如果在另一个列表中,从某个元素开始,依此类推。 我将进一步解释:我有这两个列表 numb_5 = [1, 2, 3, 4, 5] numb = [3, 1, 6, 4, 7, 8, 5, 1, 2] 我想将出现在numb_5中的len(numb_5)元素的第一个len(numb_5)追加到一个新列表中,如果元素没有出现在numb_5中,则将numb的第一个元素追加到len(numb_5)之后,依此类推,当然,与我的问题不同的元素(从numb,结果必须存储5,而不

我想从一个列表中附加下一个元素,如果在另一个列表中,从某个元素开始,依此类推。 我将进一步解释:我有这两个列表

numb_5 = [1, 2, 3, 4, 5]
numb = [3, 1, 6, 4, 7, 8, 5, 1, 2]
我想将出现在
numb_5
中的
len(numb_5)
元素的第一个
len(numb_5)
追加到一个新列表中,如果元素没有出现在
numb_5
中,则将
numb
的第一个元素追加到
len(numb_5)
之后,依此类推,当然,与我的问题不同的元素(从
numb
,结果必须存储5,而不是7,它应该存储1)。我希望用我的错误的代码,解释会更清楚:

result = []
for n in numb[:len(numb_5)]:
    if n in numb_5:
        result.append(n)
    else:
        count = 1
        if numb[len(numb_5)+count] in numb_5:
            result.append(numb[len(numb_5)+count])
        else:
            count += 1
我想问题出在最后一个else语句中,因为结果存储5而不是继续存储1,但无论如何都不能解决它。 从错误代码中获取结果:
result=[3,1,5,4,5]
请求的结果应该是:
result=[3,1,5,4,1]


我非常感谢任何能帮助我的人

绘制流程图或以其他方式规划代码确实很有帮助,所以让我们试一试

  • 我们有
    numb_5=[…]
    numb=[…]
    我们知道
    len(numb)>len(numb_5)
  • 让我们将“主要选择”和“次要选择”分离到单独的数组中,以使生活更轻松
    • numb\u pri=numb[0:len(numb\u 5)]
    • numb_sec=numb[len(numb_5):]
  • 让我们也设置
    numb_5=set(numb_5)
    以更快地进行成员资格检查
  • 现在我们不妨去掉
    numb_sec
    中不在
    numb_5
    中的数字,因为我们无论如何都不想要它们
  • 创建一个空的
    result=[]
    列表
  • 当我们迭代
    numb\u pri
    的每个元素
    e
    时:
  • e
    numb_5
    中吗?
    • 是吗?将
      e
      添加到
      result
    • 没有?拉动
      numb_sec
      的第一个元素,并将其添加到
      result
      • numb_sec
        中没有更多要拉的元素?想办法处理这个案子!!!也许我们可以退一步,将
        e
        添加到
        result
  • 转到下一个
    e
  • 作为代码:

    numb_pri = numb[0:len(numb_5)]
    numb_sec = numb[len(numb_5):]
    
    numb_5 = set(numb_5)
    
    # Getting rid of useless elements of numb_sec
    numb_sec = [x for x in numb_sec if x in numb_5]
    
    result = []
    
    for e in numb_pri:
        if e in numb_5: # e is in numb_5
            result.append(e) # Push e into result
        else:
            if numb_sec: # numb_sec isn't empty
                x = numb_sec.pop(0) # Remove the first element of numb_sec into x
                result.append(x)    # Push x into result
            else: # numb_sec is empty
                result.append(e) # Fallback: Push e into result
    
    print(result)
    
    这为我们提供了输出:

    [3, 1, 5, 4, 1]
    

    我认为您的代码几乎是正确的,请将
    count=1
    移到代码段的最顶端。不幸的是,仍然没有给出正确的结果:(非常感谢!是否可以不删除元素就执行此操作?我需要它来处理数据列,因为删除数据列的元素会弄乱索引。我们在步骤2中制作了一个副本,因此原始列表将保持不变。)