【问题标题】:Python concatenate string for conditions used in a generator expressionPython为生成器表达式中使用的条件连接字符串
【发布时间】:2017-08-01 17:08:03
【问题描述】:

我有一组生成器表达式的条件,它们会有所不同,如果可能的话,我想尝试将这些条件连接为一个字符串,并在生成器表达式中使用这个字符串变量:

以下工作正常:

Total = sum(sale["Date"] == date for sale in Sales_Store)

其中 date 是一个整数,Sales_Store 是具有相同键的字典列表,“Date”是键名之一。它返回满足此条件的销售商店中的销售数量。

但这会产生错误:+: 'int' and 'str' 的操作数类型不受支持

strTest = "sale[\"Date\"] == date for sale in Sales_Store"
Total = sum(strTest)

当然,如果某个其他条件成立,我只希望在生成器表达式中使用此条件,并且有几个其他条件可以与此连接,每个条件仅适用于某些情况。

那么你知道是否有办法使这种串联工作吗?

【问题讨论】:

  • Nitpick:你没有列表理解,你有一个生成器表达式。
  • 字符串不是可执行代码。如果可能的话,Python 不会查看字符串并执行它。
  • @Md.RezwanulHaque:没有更多代码,问题就很清楚了。我不确定您希望从“完整代码”中学到什么。对于不完整的问题,我们要求提供minimal reproducible example,而不是完整的代码。

标签: python if-statement concatenation generator-expression


【解决方案1】:

字符串不是可执行代码。如果可能的话,Python 不会查看字符串并执行它。您需要以不同的方式表达您的条件。

你可以创建一个函数,给定 one 字典返回一个布尔值;对于一个简单的表达式,您可以使用 lambda 语法创建该函数:

condition = lambda d: d['Date'] == date

对于较大的测试,您可以使用def condition(d): 函数定义并使用多个语句等。函数是可执行表达式!

然后在 map() call 中使用它来将条件应用于每个字典:

sum(map(condition, Sales_Store))

如果您需要动态地更改条件,则构建一系列测试,并使用any()all() 函数来组合这些测试:

conditions = (test1, test2, test3)
all_conditions = lambda d: all(t(d) for t in conditions)
any_condition = lambda d: any(t(d) for t in conditions)

all_conditions_sum = map(all_conditions, Sales_Store)
any_conditions_sum = map(any_conditions, Sales_Store)

正如您可能从函数名称中看出的那样,any() 将返回 True 如果 一个 测试为真,all() 如果 所有测试是真的。

如何选择测试进入conditions 序列取决于您。例如,您可以使用字典将用户友好的字符串映射到函数并让最终用户决定。

【讨论】:

  • 补充一点,OP之所以有这个特定的错误,是因为sum函数默认从0开始,然后给它加值;这就是int 的来源。
  • 非常有帮助的@Martijn Pieters,仅供参考,我应该提到的可能是条件的内容实际上取决于“Sales_Store”列表中当前“销售”字典的内容。
  • fyi 如果其他人有一天读到了这篇文章,我做了 Total = sum(conditions(sale, date, end, p_id, c_id, s_id, r_id) for sale in Sales_Store) 然后作为@Martijn 的建议,创建函数定义条件(sal,...):必须更改每个变量名称,因为它的函数,有点难看但它有效,这是针对某些网站挑战,所以在现实生活中我猜会使用正确的数据库应用程序但不是我认为这是一个选择。仅供参考,我的最终代码适用于 12 个测试输入中的 10 个,其他 2 个超时,我想这是整体算法,抱歉仍然在评论中使用降价。
【解决方案2】:

您是否尝试过 int() 函数在加法之前将所有内容都转换为整数?

【讨论】:

  • boolintTrueFalse 的子类已经是整数,值10。这将如何帮助将条件提取到单独的实体中?
猜你喜欢
  • 1970-01-01
  • 2021-08-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-08
  • 2012-05-26
  • 2013-05-13
相关资源
最近更新 更多