Python重组列表,使列表中 每个成员 都与 其他成员 相临

比如说列表中有Kenn、Tom、Jerry、Jenifer、Candy,想让其中每个人都与其他四个人相邻:

import numpy as np

SI = np.array([], dtype=int)
for i in range(5):
    SI = np.append(SI, i+1)
print(SI)   # [1 2 3 4 5]

people = ['Kenn', 'Tom', 'Jerry', 'Jenifer', 'Candy']


def not_exist(arr, array):
    for i in range(len(array)):
        if arr[0] == array[i]:
            if i != len(array)-1:
                if arr[1] == array[i+1]:
                    return False
    return True


def algorithm1_real(SI):
    SIS = [1]
    SI_new = [SI[0]]
    i = 1
    j = i + 1
    while i != j:
        if j > len(SI):
            j = 1
        elif not_exist([i, j], SIS) and not_exist([j, i], SIS):
            SI_new.append(SI[j-1])
            SIS.append(j)
            i = j
            j = j + 1
        else:
            j = j + 1
    return SI_new


print(algorithm1_real(SI))
# [1, 2, 3, 4, 5, 1, 3, 5, 2, 4, 1]
print(algorithm1_real(people))
# ['Kenn', 'Tom', 'Jerry', 'Jenifer', 'Candy', 'Kenn', 'Jerry', 'Candy', 'Tom', 'Jenifer', 'Kenn'] 

输出结果:

['Kenn', 'Tom', 'Jerry', 'Jenifer', 'Candy', 'Kenn', 'Jerry', 'Candy', 'Tom', 'Jenifer', 'Kenn']

对Kenn来说,他与其余四人Tom、Jerry、Jenifer、Candy均相邻。

对Jerry也是如此:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值