How to create tuple with a loop in python

后端 未结 6 1282
梦如初夏
梦如初夏 2021-02-13 17:24

I want to create this tuple:

a=(1,1,1),(2,2,2),(3,3,3),(4,4,4),(5,5,5),(6,6,6),(7,7,7),(8,8,8),(9,9,9)

I tried with this

a=1,1,         


        
相关标签:
6条回答
  • 2021-02-13 18:00

    itertools.repeat can also be used here:

    >>> from itertools import repeat
    >>> [tuple(repeat(i, 3)) for i in range(1, 10)]
    [(1, 1, 1), (2, 2, 2), (3, 3, 3), (4, 4, 4), (5, 5, 5), (6, 6, 6), (7, 7, 7), (8, 8, 8), (9, 9, 9)]
    

    If you want the final result to be in a tuple of tuples instead of a list of tuples, you can wrap tuple again:

    >>> tuple(tuple(repeat(i, 3)) for i in range(1, 10))
    ((1, 1, 1), (2, 2, 2), (3, 3, 3), (4, 4, 4), (5, 5, 5), (6, 6, 6), (7, 7, 7), (8, 8, 8), (9, 9, 9))
    
    0 讨论(0)
  • 2021-02-13 18:06

    A tuple is an immutable list. This means that, once you create a tuple, it cannot be modified. Read more about tuples and other sequential data types here.


    So, if you really need to change a tuple during run time:

    1. Convert the tuple into a list
    2. Make the necessary changes to the list
    3. Convert the list back to a tuple

    or

    1. Create a list
    2. Modify the list
    3. Convert the list into a tuple

    So, in your case:

    a = []
    for i in range (1,10):
        a.append((i,i,i))
    a = tuple(a)   
    print a
    
    0 讨论(0)
  • 2021-02-13 18:17

    If I were to imitate something like this, I would have done it in the following way:

    a = tuple((n,n,n) for n in range(1,10))
    print(a)
    
    #((1, 1, 1), (2, 2, 2), (3, 3, 3), (4, 4, 4), (5, 5, 5), (6, 6, 6), (7, 7, 7), (8, 8, 8), (9, 9, 9))
    

    This is the most simple and pythonic way to do this specific job.

    0 讨论(0)
  • 2021-02-13 18:23

    A little experimentation got this working. I guess you need a comma after the tuple in a to convince python it is a tuple.

    a = ((1,1,1),)
    for i in range(2, 10):
      a = a + ((i,i,i),)
    
    print(a)
    
    0 讨论(0)
  • 2021-02-13 18:25

    Use an extra comma in your tuples, and just join:

    a = ((1,1,1),)
    for i in range(2,10):
        a = a + ((i,i,i),)
    

    Edit: Adapting juanpa.arrivillaga's comment, if you want to stick with a loop, this is the right solution:

    a = [(1,1,1)]
    for i in range (2,10):
        a.append((i,i,i))
    a = tuple(a)   
    
    0 讨论(0)
  • 2021-02-13 18:25

    You can declare it without having to use a loop.

    a = tuple((i,)*3 for i in range(1, 10))
    
    0 讨论(0)
提交回复
热议问题