首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否有可能在组合迭代工具中使用lambda?以便与嵌套列表中的特定元素进行组合。

是否有可能在组合迭代工具中使用lambda?以便与嵌套列表中的特定元素进行组合。
EN

Stack Overflow用户
提问于 2022-03-02 16:10:12
回答 1查看 92关注 0票数 0

我有一个csv文件,其中包含操作:

代码语言:javascript
复制
Action Name,Price,Benefit
Action-1,20,5,1.0
Action-2,30,10,3.0
Action-3,50,15,7.5
Action-4,70,20,14.0
Action-5,60,17,10.2
Action-6,80,25,20.0
Action-7,22,7,1.54
Action-8,26,11,2.86

我把它转换成一个列表:

代码语言:javascript
复制
rows = []
with open("files/actions_with_benefits.csv", 'r') as file:
csv_reader = csv.reader(file)
header = next(csv_reader)
for row in csv_reader:
    rows.append(row)
print("header", header)
print("rows", rows)

rows:
[['Action-1', '20', '5', 1.0], ['Action-2', '30', '10', 3.0], ['Action-3', '50', '15', 7.5], ['Action-4', '70', '20', 14.0], ['Action-5', '60', '17', 10.2], ['Action-6', '80', '25', 20.0], ['Action-7', '22', '7', 1.54], ['Action-8', '26', '11', 2.86], ['Action-9', '48', '13', 6.24], ['Action-10', '34', '27', 9.18], ['Action-11', '42', '17', 7.14]]

我最初需要计算我可以用500美元买到的不同动作的所有组合(我只能买其中的一个)。

我使用组合来完成这个任务(我过滤了我的操作列表,创建了一个只包含操作价格的列表,我称之为数字):

代码语言:javascript
复制
target = 500

result = [seq for i in range(len(numbers), 0, -1)
      for seq in itertools.combinations(numbers, i)
      if sum(seq) == target]

但我想知道,如果不过滤其他值,比如示例操作的名称和好处,我就能做到这一点,因为我需要它们。例如,在sort()方法中,您可以使用lambda,它只允许对列表中的一个元素排序,但返回与所有元素排序的列表。

就像我在这个例子中发现的:输入:['rishav',10,'akash',5,'ram',20,'gaurav',15]

代码语言:javascript
复制
def Sort(sub_li):

sub_li.sort(key = lambda x: x[1])
return sub_li

sub_li =[['rishav', 10], ['akash', 5], ['ram', 20], ['gaurav', 15]]

print(Sort(sub_li))
Output : [['akash', 5], ['rishav', 10], ['gaurav', 15], ['ram', 20]]

您知道是否有可能在itertools.combinations中做到这一点吗?

提前感谢您的帮助,祝您今天愉快

EN

回答 1

Stack Overflow用户

发布于 2022-03-02 16:38:22

只是一个简单的选择:并行运行两个combinations。可能比将lambda填充到sum中要快(虽然我猜速度不是问题,否则就不会使用蛮力了)

代码语言:javascript
复制
result = [rowseq
          for i in range(len(numbers), 0, -1)
          for seq, rowseq in zip(
              itertools.combinations(numbers, i),
              itertools.combinations(rows, i)
          )
          if sum(seq) == target]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71325816

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档