【问题标题】:Python: Combination with criteriaPython:结合标准
【发布时间】:2017-05-06 05:53:35
【问题描述】:

我有以下组合列表

a = [(1,10),(2,8),(300,28),(413,212)]

b = [(8,28), (8,15),(10,21),(28,34),(413,12)]

我想从这两个列表中创建一个新的组合列表,它遵循以下标准:

一个列表 a 和列表 b 有共同的元素

  • 列表 a 中元组的第二个元素等于 列表 b 中的元组。
  • List a 和 List b 的组合应该形成一个新的组合:

    d = [(1,10,21),(2,8,28),(2,8,15),(300,28,34)]

    • 两个列表中不满足条件的所有其他元组都将被忽略。

问题

  1. 我可以使用 itertools 进行这种基于标准的组合吗?

  2. 使用/不使用模块来解决这个问题的最优雅的方法是什么?

  3. 如何在excel表格中显示输出以将列表d中元组的每个元素显示到单独的列中,例如:

    d = [(1,10,21),(2,8,28),(2,8,15),(300,28,34)] 在excel中显示为:

Col A = [1, 2, 2, 300]

Col B = [10,8,8,28]

Col C = [21,28,15,34]

【问题讨论】:

  • 你有没有尝试过?
  • 已经尝试过 itertools 但找不到合适的标准选项。运行 for 循环不起作用。到目前为止,我正在生成输出的 csv 文件,然后将其复制并粘贴到 excel 中。 k = list(itertools.product(b,c)) import csv with open ('Combination.csv', 'a') as csv_file: csv_app = csv.writer(csv_file) csv_app.writerow(k)'''跨度>

标签: python combinations itertools


【解决方案1】:

pandas 就像 excel 的魅力一样。

代码如下:

a = [(1,10),(2,8),(300,28),(413,212)]

b = [(8,28), (8,15),(10,21),(28,34),(413,12)]

c = [(x, y, t) for x, y in a for z, t in b if y == z]

import pandas as pd

df = pd.DataFrame(c)
df.to_excel('MyFile.xlsx', header=False, index=False)

【讨论】:

    猜你喜欢
    • 2018-04-14
    • 1970-01-01
    • 1970-01-01
    • 2017-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-08
    • 1970-01-01
    相关资源
    最近更新 更多