Denalsa 2022-08-07 11:43 采纳率: 100%
浏览 95
已结题

python 列表的简单操作

长度不同的两个列表,交换变形

parent1= [7,5,8,6,4,3,2,1,9]
parent2=[5,4,6,9,2,1,7]

第一步:在parent1,parent2上,随机抽取各自的子列表,相同位置,相同长度。(长度可变,位置可变),例如:

#长度为3,在原列表位置是[1,3]
map1=[5,8,6]         #点位是[1,3]
map2=[4,6,9]   #点位是[1,3]

#长度为4,在原列表位置是[1,4]
map1=[5,8,6,4]     #点位是[1,4]
map2=[4,6,9,2]  #点位是[1,4]

第二步:将提取的子列表插入到对方列表中(以长度3为例):

map1=[5,8,6]                          #点位是[1,3],替换parent2里相同点位的[4,6,9],得到child1
parent2=[5,4,6,9,2,1,7]
child1=[5,5,8,6,2,1,7]               #保持原来长度

map2=[4,6,9]                     #按照点位[1,3],插入到parent1,得到child2
parent1=[1,2,3,4,5,6,7,8] 
child2=[1,4,6,9,5,6,7,8]             #保持原来长度

第三步:去掉child重复元素,且保持parent列表中元素的先后顺序;

#example1
map1=[5,8,6]                  
parent2=[5,4,6,9,2,1,7]           #保护[5,8,6]  不变
child1=[5,5,8,6,2,1,7]             #去重。第零个元素[5]的备选替换元素有:parent2中的[4],[9]

new_chid1=[9,5,8,6,2,1,7]    #这个不可以,因为parent2中 [9] 在 [5] 的后面
new_chid1=[4,5,8,6,2,1,7]    #这个可以,因为parent2中 [4] 在 [5] 的前面


#example2
map2=[4,6,9]                  
parent1=[1,2,3,4,5,6,7,8]           #保护[[4,6,9]  不变
child2=[1,4,6,9,5,6,7,8]             #去重。第五个元素[6]的备选替换元素有:parent1中的[2],[3]

new_chid2=[1,4,6,9,5,2,7,8]    #这个可以,因为parent2中 [2] 在 [7] 的前面
new_chid2=[1,4,6,9,5,3,7,8]    #这个可以,因为parent2中 [3] 在 [7] 的前面


第四步:随机保留一个 new_chid2 就可以,输出new_chid1,new_chid2

  • 写回答

5条回答 默认 最新

  • 这次真没糖 2022-08-07 12:35
    关注
    parent1 = [7, 5, 8, 6, 4, 3, 2, 1, 9]
    parent2 = [5, 4, 6, 9, 2, 1, 7]
    start = 1   # 起点下标
    len = 3  # 长度
    
    # 抽取指定子列表
    map1 = parent1[start:start+len]
    map2 = parent2[start:start+len]
    print('map1=', map1)
    print('map2=', map2)
    # 插入对方列表
    child1 = parent1[:]
    child2 = parent2[:]
    child1[start:start+len] = map2
    child2[start:start+len] = map1
    print('child1=', child1)
    print('child2=', child2)
    # 去掉child重复元素,且保持parent列表中元素的先后顺序;
    
    
    def unique(child, parent):
        new_child = []
        for i, num in enumerate(child):
            if num not in new_child:
                new_child.append(num)
            else:
                j = 0
                while j <= i:
                    if parent[j] not in new_child:
                        new_child.append(parent[j])
                        break
                    j += 1
        return new_child
    
    
    new_child1 = unique(child1, parent1)
    new_child2 = unique(child2, parent2)
    print('new_child1:', new_child1)
    print('new_child2:', new_child2)
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(4条)

报告相同问题?

问题事件

  • 系统已结题 8月15日
  • 已采纳回答 8月7日
  • 修改了问题 8月7日
  • 修改了问题 8月7日
  • 展开全部

悬赏问题

  • ¥15 这个主板怎么能扩出一两个sata口
  • ¥15 不是,这到底错哪儿了😭
  • ¥15 2020长安杯与连接网探
  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示
  • ¥15 求三国群英传pl国战时间的修改方法