微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

来自一个集合的列表理解,其元素是由两个元组组成的元组

如何解决来自一个集合的列表理解,其元素是由两个元组组成的元组

我有一个巨大的元组列表,每个元组都包含另外两个元组,例如

lst = [((0,2,1),(2,1,3)),((3,(0,1)),...]

此列表中的许多元素在某些条件下是不可接受的,我正在尝试创建一个由满足这些条件的元素组成的新列表。其中,我想删除那些左(右)元组包含零但右(左)元组在相同位置没有零的元素。还有那些左元组包含两个连续的非零数字(在给定范围内)并且位于右元组中与重复出现的数字相同位置的数字不是1的那些元素。为此,我尝试过:

acceptable_lst = [elem for elem in lst for j in range(3) if not ((elem[0][j] == 0 and
                  elem[1][j] != 0) or (j < 2 and elem[0][j] != 0 and elem[0][j] == elem[0][j+1]
                  and elem[1][j+1] != 1)]

当我将此代码应用于例如

lst = [((3,2),(1,((0,3),((1,(3,3,((2,3))]

我想得到:

acceptable_lst = [((2,3))]

为什么? lst 中的第一个元素在左元组中的表示为 2,第三个位置的第二个元素为 2,但右元组中的第三个元素不是 1。第二个元素的第一个位置为 0左元组和右元组相同位置的非零,依此类推……只有lst中的最后一个元素满足上述条件。

然而我得到的是

[((3,3))]

这表明我的代码完全错误。我怎样才能实现我所需要的?

解决方法

检查函数的有效性

def valid(elemLeft,elemRight):
    lastItem = None
    for i in range(3):
        if elemLeft[i] == 0 and elemRight[i] != 0:
            return False

        if lastItem != None:
            if elemLeft[i] == lastItem and elemRight[i] != 1:
                return False

        lastItem = elemLeft[i]
    
    return True

lst = [((3,2,2),(1,3)),((0,1,3),(2,((1,(3,3,((2,1),3))]
acceptable_lst = [elem for elem in lst if valid(elem[0],elem[1])]
print(acceptable_lst)
,

您在列表理解中执行了两个 for 循环。

[ elem for elem in lst for j in range(3) if condition ]

相当于:

out_list = []
for elem in lst:
    for j in range(3):
        if condition:
            out_list.append(elem)

如果你必须在这个任务中使用列表理解,你可以修改它:

import numpy as np

acceptable_lst = [elem for elem in lst 
                  if not (np.any([(elem[0][j] == 0 and elem[1][j] != 0) for j in range(3)])) 
                    and not np.any([(j < 2 and elem[0][j] != 0 and elem[0][j] == elem[0][j+1] and elem[1][j+1] != 1) for j in range(3)])]

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?