python - 我想将列表拆分为两个列表 right_order[] 和 reverse_order[],同时比较列表中的项目

标签 python python-3.x python-2.7 list-comprehension

我有 结果 列表,其中包含 A、B 和 B 等有序项目,A 组合或者可以是 1,2 和 2,1 等,如果我们发现 A 的任何反向组合、B 或 1,2 或 3211、3222 或任何反向组合应存储在 target_list 中,正确排序的组合应存储在 source_list 中。另外,如果我们没有找到任何反向组合,则将其添加到 source_list 中,但如果我们发现,target_list 必须仅包含 source_list 中项目的反向组合.

这是我的代码,我只得到A,B组合,你能告诉我如何动态地代替A吗?它可以是任何东西,代替B它可以是任何应该满足上述条件的东西-解释条件

result = [('A','B', 'IP1','GP1'), ('B', 'C', 'IP2','GP2'),('A', 'C', 'IP3','GP2'),('A','B', 'IP4','GP2'),('D', 'Z', 'IP5','GP2'),('B', 'A', 'IP6','GP2'), ('C','B','IP7','GP2'), ('C', 'A', 'IP8','GP2'),('C','B','IP9','GP2')]
a=[i for i,v in enumerate(result) if v[:2]==('B','A')]
Source_list,target_list=result[:a[0]],result[a[0]:]
print(Source_list)
print(target_list)

输出:

[('A', 'B', 'IP1', 'GP1'), ('B', 'C', 'IP2', 'GP2'), ('A', 'C', 'IP3', 'GP2'), ('A', 'B', 'IP4', 'GP2'), ('D', 'Z', 'IP5', 'GP2')]
[('B', 'A', 'IP6', 'GP2'), ('C', 'B', 'IP7', 'GP2'), ('C', 'A', 'IP8', 'GP2'), ('C', 'B', 'IP9', 'GP2')]

最佳答案

我不太确定理解你的意思,但你会告诉我......

def kamoulox(results):
    source_list = []
    target_list = []
    combis = set((result[0], result[1]) for result in results if result[0] <= result[1])
    for combi in combis:
        i = 0
        while i < len(results):
            if results[i][0:2] == combi:
                source_list.append(results.pop(i))
            elif results[i][0:2] == combi[::-1]:
                target_list.append(results.pop(i))
            else:
                i += 1
    return source_list, target_list

results = [
    ('32891', '32822', 'EKRGMD92-vMME-01', '10.88.158.81'),
    ('32822', '32891', 'EKRGMD92-vMME-02', '10.88.159.113'),
    ('32822', '32891', 'HRSNNJAQ-vMME-01', '10.88.162.81'),
    ('32822', '32891', 'HRSNNJAQ-vMME-02', '10.88.163.113'),
    ('32822', '32781', 'EKRGMD92-vMME-02', '10.88.159.113'),
    ('32822', '32781', 'HRSNNJAQ-vMME-01', '10.88.162.81'),
    ('32822', '32781', 'HRSNNJAQ-vMME-02', '10.88.163.113'),
    ('33033', '32891', 'EKRGMD92-vMME-02', '10.88.159.113'),
    ('33033', '32891', 'HRSNNJAQ-vMME-01', '10.88.162.81'),
    ('33033', '32891', 'HRSNNJAQ-vMME-02', '10.88.163.113'),
    ('33033', '32822', 'EKRGMD92-vMME-01', '10.88.158.81'),
    ('33033', '32781', 'EKRGMD92-vMME-02', '10.88.159.113'),
    ('33033', '32781', 'HRSNNJAQ-vMME-01', '10.88.162.81'),
    ('33033', '32781', 'HRSNNJAQ-vMME-02', '10.88.163.113'),
    ('32781', '32891', 'KSCYMOEC-MME-03', '10.148.9.19'),
    ('32781', '32822', 'EKRGMD92-vMME-01', '10.88.158.81'),
    ('32781', '32822', 'KSCYMOEC-MME-03', '10.148.9.19'),
    ('32781', '33033', 'KSCYMOEC-MME-03', '10.148.9.19')
]
source_list, target_list = kamoulox(results)

# source_list contains good ordered items (with or without reversed equivalent)
# target_list contains wrong ordered items with at least one equivalent into source_list
# results now contains wrong ordered items without good ordered equivalent

关于python - 我想将列表拆分为两个列表 right_order[] 和 reverse_order[],同时比较列表中的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53333305/

相关文章:

python - 检查 shutil.copyfile 何时完成

python - biopython 没有名为 Bio 的模块

python - python 中的极地热图

django - pip打包一个django项目

python - 在 matplotlib 中显示 Surface 前面的轮廓

python - UnicodeWarning 只触发一次

python - 在文件循环中连接 Pandas 数据框

python - 在 Tornado 的阻塞上下文中调用异步函数

javascript - 为什么在此示例中图像高度变得如此之大?

python-2.7 - 将列名转换为第一个索引中的值