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

如何使用python编写代码以将列表中的列表与特定逻辑合并

如何解决如何使用python编写代码以将列表中的列表与特定逻辑合并

我需要一些帮助来编写下面在 python 3.6 中提到的特定逻辑。

假设我有一个列表“a”。请注意,此列表不是静态长度,值可能会有所不同。

a= ['Theresa','Paul','lyndsay','Nick','Tim','Ray','Charles']

我想使用这些值生成如下列表:

(((((name equals "Theresa") or (name equals "Paul")) or ((name equals "lyndsay") or (name equals "Nick"))) or ((name equals "Tim") or (name equals "Ray"))) or (name equals "Charles"))

这样做的逻辑是,如果您注意到括号,它们总是一次比较 2 个条件。

下面的第一组:如果你看到它比较了 2 个值。

((name equals "Theresa") or (name equals "Paul"))

同样的第二组是:

((name equals "lyndsay") or (name equals "Nick"))

现在我们有 2 个集合,它们可以组合并用括号包裹在一起。这现在变成了一个可以与另一个集合组合的单一集合。让我们称之为设置 3

(((name equals "Theresa") or (name equals "Paul")) or ((name equals "lyndsay") or (name equals "Nick")))

继续,下一组 4 将是:

((name equals "Tim") or (name equals "Ray"))

现在 set 3 和 set 4 可以组合并用括号包裹在一起。这是第 5 组:

((((name equals "Theresa") or (name equals "Paul")) or ((name equals "lyndsay") or (name equals "Nick"))) or ((name equals "Tim") or (name equals "Ray")))

接下来我们只剩下 1 个值,所以它成为我们的最后一组:

(name equals "Charles")

现在可以与 set 5 结合使用以获取从列表 'a' 生成的最终字符串:

(((((name equals "Theresa") or (name equals "Paul")) or ((name equals "lyndsay") or (name equals "Nick"))) or ((name equals "Tim") or (name equals "Ray"))) or (name equals "Charles"))

类似的列表 'b' 应该生成

b= ['key1','key2','key3','key4','key5']

((((keyword equals "key1") or (keyword equals "key2")) or ((keyword equals "key3") or (keyword equals "key4"))) or (keyword equals "key5"))

列表 'a' 和 'b' 中的 2 应使用“and”运算符组合以给出:

((((((name equals "Theresa") or (name equals "Paul")) or ((name equals "lyndsay") or (name equals "Nick"))) or ((name equals "Tim") or (name equals "Ray"))) or (name equals "Charles")) and ((((keyword equals "key1") or (keyword equals "key2")) or ((keyword equals "key3") or (keyword equals "key4"))) or (keyword equals "key5")))

到目前为止我已经尝试过使用以下代码生成列表。但不知道如何进一步:

from math import ceil

size = 2
seq = ['Theresa','Charles']

split_list = [
    seq[i * size:(i * size) + size]
    for i in range(ceil(len(seq) / size))
]

# print(split_list)
mid_list = []
qs = ""

for i,item in enumerate(split_list):
    sub_q = ""
    if i > 0:
        sub_q = f'{qs} or '

    if len(item) == 2:
        sub_q = f'((name equals "{item[0]}") or (name equals "{item[1]}"))'
    else:
        sub_q = f'(name equals "{item[0]}"))'

    mid_list.append([sub_q])
print(mid_list)

Output: [['((name equals "Theresa") or (name equals "Paul"))'],['((name equals "lyndsay") or (name equals "Nick"))'],['((name equals "Tim") or (name equals "Ray"))'],['(name equals "Charles"))']]

感谢您对此的任何帮助。

谢谢。

解决方法

我不确定这是否是您要找的东西,对于我的一生,我不确定我知道您为什么要创建结果,但这是我的看法: 鉴于:

a= ['Theresa','Paul','lyndsay','Nick','Tim','Ray','Charles']

和函数:

def mergeList(sl):
    rslt = []
    for i in range(1,len(sl),2):
        rslt.append([f'((name equals {sl[i-1]}) or (name equals {sl[i]}))'])
    if len(sl)%2 == 1:
        rslt.append([f'((name equals {sl[-1]}))'])
    return rslt    

如果你执行:

mergeList(a)  

你得到:

[['((name equals Theresa) or (name equals Paul))'],['((name equals lyndsay) or (name equals Nick))'],['((name equals Tim) or (name equals Ray))'],['((name equals Charles))']]
,

我设法编写了以下代码来按照我的逻辑生成字符串。

from math import ceil

size = 2
seq = ['Theresa','Ray']

odd_length = len(seq) % 2
original_length = len(seq)

split_list = [
    seq[i * size:(i * size) + size]
    for i in range(ceil(len(seq) / size))
]

# print(split_list)
mid_list = []
qs = ""

for i,item in enumerate(split_list):
    sub_q = ""
    if i > 0:
        sub_q = f'{qs} or '

    if len(item) == 2:
        sub_q = f'((name contains "{item[0]}") or (name contains "{item[1]}"))'
    elif original_length == 1:
            sub_q = f'(name contains "{item[0]}")'
    else:
        sub_q = f'(name contains "{item[0]}"))'

    mid_list.append([sub_q])

a = mid_list

while len(mid_list) != 1:
    a = []
    if len(mid_list) > 2:
        q = f'({mid_list[0][0]} or {mid_list[1][0]})'
        a.append([q])
        for i in range(len(mid_list)):
            if i > 1:
                a.append(mid_list[i])
        mid_list = a
    elif len(mid_list) == 2 and odd_length == 1:
        q = f'({mid_list[0][0]} or {mid_list[1][0]}'
        a.append([q])
        for i in range(len(mid_list)):
            if i > 1:
                a.append(mid_list[i])
        mid_list = a
    else:
        q = f'({mid_list[0][0]} or {mid_list[1][0]})'
        a.append([q])
        for i in range(len(mid_list)):
            if i > 1:
                a.append(mid_list[i])
        mid_list = a


print(a[0][0])

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 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”。这是什么意思?