gpt4 book ai didi

Python:从奇怪的列表中获取1.0的元素?

转载 作者:太空宇宙 更新时间:2023-11-03 14:23:19 27 4
gpt4 key购买 nike

所以我正在使用 Gurobi 优化器,并且我的决策变量位于名为 Decision_bi 的列表中,如下所示:

<gurobi.Var dc0_st0_1/0 (value 0.0)>

我已成功将这些过滤为变量名称包含“_1/0”的变量(我认为):

matching = filter(lambda x: '_1/0' in x, decision_bi)

但是现在,我只需要提取该匹配列表中具有(值 1.0)的那些,如下所示:

<gurobi.Var dc5_st1099_1/0 (value 1.0)>

我已经设法将它放入一个平面列表中(我遇到了问题,它只能通过不合作的 Decision_bi[i][j].X 和 .VarName 访问),并且正在尝试使用正则表达式来过滤1.0 数字,代码如下:

import re

flat_list=[]
for sublist in matching:
for item in sublist:
flat_list.append(item)

results=[]
for i in len(flat_list):
results[i] = re.search('.*?1\\.0', flat_list[i], flags=0)

但是,它告诉我该列表不可迭代......我不知道为什么?在 flat_list 上使用 type 返回一个列表。我的最终目标是将中间字符串的 dc 和 st 部分后面的数字写入两个不同的列表到我们的数据库中(如果重要的话)。

最佳答案

您可以在单个正则表达式中应用“1/0”和“值 1.0”检查:

In [1]: import re

In [2]: pattern = re.compile(r"<gurobi\.Var .*?_1/0 \(value 1\.0\)>")

In [3]: pattern.match("<gurobi.Var dc0_st0_1/0 (value 0.0)>")

In [4]: pattern.match("<gurobi.Var dc5_st1099_1/0 (value 1.0)>")
Out[4]: <_sre.SRE_Match object; span=(0, 39), match='<gurobi.Var dc5_st1099_1/0 (value 1.0)>'>

请注意,我们需要对文字点以及左右括号进行 bask-slash-escape,因为它们在正则表达式语法中具有特殊含义。

如果您有这样的变量列表,则可以使用列表理解将它们过滤掉:

In [5]: values = [
...: "<gurobi.Var dc0_st0_1/0 (value 0.0)>",
...: "<gurobi.Var dc5_st1099_1/0 (value 1.0)>",
...: "<gurobi.Var dc5_st1099_2/0 (value 2.0)>"
...: ]
In [6]: [value for value in values if pattern.match(value)]
Out[6]: ['<gurobi.Var dc5_st1099_1/0 (value 1.0)>']

关于Python:从奇怪的列表中获取1.0的元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47804976/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com