brandizzi icon

Python script to find intersection between list of numbers.

brandizzi | PRO | 07/16/18 11:45:08 AM UTC | 0 ⭐ | 1111 👁️ | Never ⏰ | []
Python |

1.27 KB

|

None

|

0 👍

/

0 👎

#!/usr/bin/env python
import re
import sys
 
def get_numbers(string):
    """
 
    Get numbers from string. Works if separated by commas...
 
    >>> get_numbers('1, 2, 3,4')
    [1, 2, 3, 4]
 
    ...and hyphens:
 
    >>> get_numbers('1-2 - 3-4')
    [1, 2, 3, 4]
 
    Ignores numbers in parentheses:
 
    >>> get_numbers('1-2 (8) - 3 (10) -11.')
    [1, 2, 3, 11]
 
    """
    string = re.sub('\(\d+\)', '', string)
    parts = [s for s in re.split('\D', string) if s]
    return [int(s) for s in parts]
 
def get_repeated(list1, list2):
    """
 
    Get the repeating numbers from two lists:
 
    >>> get_repeated([1, 2, 3, 4, 5, 6], [2, 4, 6, 8, 10])
    [2, 4, 6]
 
    REturns sorted:
 
    >>> get_repeated([6, 5, 2, 3, 4, 1], [10, 4, 2, 8, 6])
    [2, 4, 6]
 
    """
    s1 = set(list1)
    s2 = set(list2)
    return sorted(s1 & s2)
 
def join_numbers(l):
    """
 
    Join the numbers with hyphens:
 
    >>> join_numbers([1, 4, 2, 3])
    '1 - 4 - 2 - 3'
 
    """
    return ' - '.join(str(v) for v in l)
 
if __name__ == "__main__":
    f1 = open(sys.argv[1])
    f2 = open(sys.argv[2])
 
    c1 = get_numbers(f1.read())
    c2 = get_numbers(f2.read())
 
    intersection = get_repeated(c1, c2)
 
    print(join_numbers(intersection))

Comments