#!/usr/bin/env PYTHONHASHSEED=1234 python3 # Copyright 2014-2019 Brett Slatkin, Pearson Education Inc. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # Reproduce book environment import random random.seed(1234) import logging from pprint import pprint from sys import stdout as STDOUT # Write all output to a temporary directory import atexit import gc import io import os import tempfile TEST_DIR = tempfile.TemporaryDirectory() atexit.register(TEST_DIR.cleanup) # Make sure Windows processes exit cleanly OLD_CWD = os.getcwd() atexit.register(lambda: os.chdir(OLD_CWD)) os.chdir(TEST_DIR.name) def close_open_files(): everything = gc.get_objects() for obj in everything: if isinstance(obj, io.IOBase): obj.close() atexit.register(close_open_files) # Example 1 import itertools # Example 2 it = itertools.chain([1, 2, 3], [4, 5, 6]) print(list(it)) # Example 3 it = itertools.repeat('hello', 3) print(list(it)) # Example 4 it = itertools.cycle([1, 2]) result = [next(it) for _ in range (10)] print(result) # Example 5 it1, it2, it3 = itertools.tee(['first', 'second'], 3) print(list(it1)) print(list(it2)) print(list(it3)) # Example 6 keys = ['one', 'two', 'three'] values = [1, 2] normal = list(zip(keys, values)) print('zip: ', normal) it = itertools.zip_longest(keys, values, fillvalue='nope') longest = list(it) print('zip_longest:', longest) # Example 7 values = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] first_five = itertools.islice(values, 5) print('First five: ', list(first_five)) middle_odds = itertools.islice(values, 2, 8, 2) print('Middle odds:', list(middle_odds)) # Example 8 values = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] less_than_seven = lambda x: x < 7 it = itertools.takewhile(less_than_seven, values) print(list(it)) # Example 9 values = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] less_than_seven = lambda x: x < 7 it = itertools.dropwhile(less_than_seven, values) print(list(it)) # Example 10 values = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] evens = lambda x: x % 2 == 0 filter_result = filter(evens, values) print('Filter: ', list(filter_result)) filter_false_result = itertools.filterfalse(evens, values) print('Filter false:', list(filter_false_result)) # Example 11 values = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] sum_reduce = itertools.accumulate(values) print('Sum: ', list(sum_reduce)) def sum_modulo_20(first, second): output = first + second return output % 20 modulo_reduce = itertools.accumulate(values, sum_modulo_20) print('Modulo:', list(modulo_reduce)) # Example 12 single = itertools.product([1, 2], repeat=2) print('Single: ', list(single)) multiple = itertools.product([1, 2], ['a', 'b']) print('Multiple:', list(multiple)) # Example 13 it = itertools.permutations([1, 2, 3, 4], 2) original_print = print print = pprint print(list(it)) print = original_print # Example 14 it = itertools.combinations([1, 2, 3, 4], 2) print(list(it)) # Example 15 it = itertools.combinations_with_replacement([1, 2, 3, 4], 2) original_print = print print = pprint print(list(it)) print = original_print