You don't need itertools
at all. Just manually create some random combinations using random.sample
.
Theoretically this can return the same sample more than once, though that is quite unlikely. If this is a concern, you can use a set
to track tuples you've seen.
#!/usr/bin/env python3
import random
def load_cities():
# hard-code some data from Wikipedia instead of loading from JSON
# to simplify the demonstration
return [
("Tōkyō", 37400068),
("Delhi", 28514000),
("Shanghai", 25582000),
("São Paulo", 21650000),
("Mexico City", 21581000),
("Cairo", 20076000),
("Mumbai", 19980000),
("Beijing", 19618000),
("Dhaka", 19578000),
("Osaka", 19281000),
("New York", 18819000),
("Karachi", 15400000),
("Buenos Aires", 14967000),
("Chongqing", 14838000),
("Istanbul", 14751000),
("Kolkata", 14681000),
("Manila", 13482000),
("Lagos", 13463000),
("Rio de Janeiro", 13293000),
("Tianjin", 13215000),
("Kinshasa", 13171000),
("Guangzhou", 12638000),
("Los Angeles", 12458000),
("Moscow", 12410000),
("Shenzhen", 11908000),
("Lahore", 11738000),
("Bangalore", 11440000),
("Paris", 10901000),
("Bogotá", 10574000),
("Jakarta", 10517000),
("Chennai", 10456000),
("Lima", 10391000),
("Bangkok", 10156000),
("Seoul", 9963000),
("Nagoya", 9507000),
("Hyderabad", 9482000),
("London", 9046000),
("Tehran", 8896000),
("Chicago", 8864000),
("Chengdu", 8813000),
("Nanjing", 8245000),
("Wuhan", 8176000),
("Ho Chi Minh City", 8145000),
("Luanda", 7774000),
("Ahmedabad", 7681000),
("Kuala Lumpur", 7564000),
("Xi'an", 7444000),
("Hong Kong", 7429000),
("Dongguan", 7360000),
("Hangzhou", 7236000),
("Foshan", 7236000),
("Shenyang", 6921000),
("Riyadh", 6907000),
("Baghdad", 6812000),
("Santiago", 6680000),
("Surat", 6564000),
("Madrid", 6497000),
("Suzhou", 6339000),
("Pune", 6276000),
("Harbin", 6115000),
("Houston", 6115000),
("Dallas", 6099000),
("Toronto", 6082000),
("Dar es Salaam", 6048000),
("Miami", 6036000),
("Belo Horizonte", 5972000),
("Singapore", 5792000),
("Philadelphia", 5695000),
("Atlanta", 5572000),
("Fukuoka", 5551000),
("Khartoum", 5534000),
("Barcelona", 5494000),
("Johannesburg", 5486000),
("Saint Petersburg", 5383000),
("Qingdao", 5381000),
("Dalian", 5300000),
("Washington, D.C.", 5207000),
("Yangon", 5157000),
("Alexandria", 5086000),
("Jinan", 5052000),
("Guadalajara", 5023000),
]
def main():
all_cities = load_cities()
for _ in range(10):
some_cities = random.sample(all_cities, 3)
total_pop = 0
names = []
for city, pop in some_cities:
names.append(city)
total_pop += pop
names[-1] = 'and ' + names[-1]
names = ', '.join(names)
print('The total population of', names, 'is', total_pop)
if __name__ == '__main__':
main()