DEV Community

Super Kai (Kazuya Ito)
Super Kai (Kazuya Ito)

Posted on • Edited on

Tuple comprehension in Python

Buy Me a Coffee

*Memo:

  • My post explains a list comprehension.
  • My post explains a set comprehension.
  • My post explains a frozenset comprehension.
  • My post explains a dictionary comprehension.
  • My post explains a generator comprehension.
  • My post explains a tuple (1).

A comprehension is the concise expression to create an iterable and there are a list, tuple, set, frozenset, dictionary(dict) and generator comprehension:

<Tuple comprehension>:

*Memo:

  • tuple() is used for a tuple comprehension because () is already used for a generator comprehension.

1D tuple:

sample = (0, 1, 2, 3, 4, 5, 6, 7)

v = tuple(x**2 for x in sample)

print(v)
# (0, 1, 4, 9, 16, 25, 36, 49)
Enter fullscreen mode Exit fullscreen mode

The below is without a tuple comprehension:

sample = (0, 1, 2, 3, 4, 5, 6, 7)

v = []

for x in sample:
    v.append(x**2)

v = tuple(v)

print(v)
# (0, 1, 4, 9, 16, 25, 36, 49)
Enter fullscreen mode Exit fullscreen mode

2D tuple:

sample = ((0, 1, 2, 3), (4, 5, 6, 7))

v = tuple(tuple(y**2 for y in x) for x in sample)

print(v)
# ((0, 1, 4, 9), (16, 25, 36, 49))
Enter fullscreen mode Exit fullscreen mode

The below is without a tuple comprehension:

sample = ((0, 1, 2, 3), (4, 5, 6, 7))

v = []

for i, x in enumerate(sample):
    v.append([])
    for y in x:
        v[i].append(y**2)
    v[i] = tuple(v[i])

v = tuple(v)

print(v)
# ((0, 1, 4, 9), (16, 25, 36, 49))
Enter fullscreen mode Exit fullscreen mode

3D tuple:

sample = (((0, 1), (2, 3)), ((4, 5), (6, 7)))

v = tuple(tuple(tuple(z**2 for z in y) for y in x) for x in sample)

print(v)
# (((0, 1), (4, 9)), ((16, 25), (36, 49)))
Enter fullscreen mode Exit fullscreen mode

The below is without a tuple comprehension:

sample = (((0, 1), (2, 3)), ((4, 5), (6, 7)))

v = []

for i, x in enumerate(sample):
    v.append([])
    for j, y in enumerate(x):
        v[i].append([])
        for z in y:
            v[i][j].append(z**2)
        v[i][j] = tuple(v[i][j])
    v[i] = tuple(v[i])

v = tuple(v)

print(v)
# (((0, 1), (4, 9)), ((16, 25), (36, 49)))
Enter fullscreen mode Exit fullscreen mode

Top comments (0)