【发布时间】:2018-08-05 23:13:21
【问题描述】:
免责声明:我正在自学 Python,因此我的每个问题都可能有一些简单的解决方案。感谢耐心!
我知道标题有点不清楚,所以我会试着用一个例子来澄清一下。
假设我们有一个交易数组:
txArray=[[u'1'],[u'2'],[u'2', u'3']]
目标是编写一个函数myIntersection(arrayOfLists),它首先计算txArray 中每个可能的列表对的交集,然后取并集。
所以myIntersection(txArray) 应该返回[u'2'],因为:
int1=intersection([u'1'],[u'2'])=[]
int2=intersection([u'1'],[u'2', u'3'])=[]
int3=intersection([u'2'],[u'2', u'3'])=[u'2']
union=(int1 U int2 U int3)=[u'2']
到目前为止我尝试过的如下:
from itertools import combinations
'''
Pseudocode:
1) Generate all possible 2-combinations of the lists in txArray
2) Flatten the lists
3) If a value appears more than once in a 2-combination, add it to
list of intersections
4) Keep unique elements in list of intersections
'''
def myIntersection(arrayOfLists):
flat_list=[]
intersections=[]
combs=list(combinations(txArray,2))
for i in range(0, len(combs)):
flat_list.append([item for sublist in combs[i] for item in sublist])
for list in flat_list:
for element in list:
if list.count(element)>1:
if element not in intersections:
intersections.append(element)
return intersections
虽然它在 python 命令行界面中工作,但当我将它保存为 python 文件并运行它时,我不断收到错误。
我的问题是: 1) 为什么我将它作为 python 文件运行时它不起作用?
2) 是否有一种更简洁、更“pythonic”的方式来做到这一点(可能使用列表推导)
3) 我确实考虑过使用集合,但我无法确定将 arrayofLists 列表(在一般情况下)迭代转换为集合。是否有一个简单的语法来做到这一点?
非常感谢!
【问题讨论】:
-
“我不断收到错误”是不充分的描述
标签: python union list-comprehension intersection