在Python中设置操作和代码优化

时间:2014-04-03 14:13:01

标签: python set

我正在尝试编写一个通用代码来对任意数量的输入文件执行set操作。

通常对于任何设置操作(我已经限制了输入文件的数量),我使用类似的东西。

my_set1 = set(map(str.strip, open('filename1.txt')))
my_set2 = set(map(str.strip, open('filename2.txt')))
common = myset1.intersection(my_set2)

每个文件只有一列。

现在我的目标是将所有集理论函数放入其中。像。的东西。

python set.py -i file1,file2,file3,file4 -o inter

这些输入来自用户。

实际上,用户可以定义输入文件的数量和他想要的操作类型。

如果你们中的任何人都可以告诉我如何做到这一点,我可以自己写其他操作,比如工会和差异

1 个答案:

答案 0 :(得分:2)

set.intersection()set.update_intersection()方法采用任何可迭代的方式,而不仅仅是集合。

由于您只对最终产品(文件之间的交集)感兴趣,因此最好在此使用set.intersection_update()

从一组开始,然后继续使用其余文件更新它:

with open(files[0]) as infh:
    myset = set(map(str.strip, infh))

for filename in files[1:]:
    with open(filename) as infh:
        myset.intersection_update(map(str.strip, infh))

您可以根据命令行开关使用方法动态:

ops = {'inter': set.intersection_update,
       'union': set.update,
       'diff': set.difference_update}

with open(files[0]) as infh:
    myset = set(map(str.strip, infh))

for filename in files[1:]:
    with open(filename) as infh:
        ops[operation](myset, map(str.strip, infh))