简体   繁体   中英

Unpacking a tuple containing integers to a list

I am trying to create a single list with a tuple that contains integers

Examples of input:

test1((1, 2, 3), 2, 3)

test2((5, -5), 10, 3)

test3((10.2, -2.2, 0, 1.1, 0.5), 12.4, 3)

I have tried iterating through the tuple in various ways, but get a "int() is not iterable error". I tried to assign variables to inputs but get an "'type' object is not subscriptable" error.

I've rewritten the script many times now and don't have previous attempts saved. The unpack methods I've found on here don't work because they require me to iterate through the input, which I cannot do (or figure out how). b = [i for sub in args for i in sub] , list(chain.from_iterable(args) ect haven't worked.

Here is what I have now

def checkio(*args):
    ab, cd, ef = args
    print (ab)
    empty = []
    empty.append(cd)
    empty.append(ef)
    for i in ab:
        empty.append(i)
    print (empty)

A bit of a mess. I'm quite new to python so I'm sure the solution is very simple

If your input is as regular as your samples, the answer is simple; create a new tuple by concatenating:

def checkio(ab, cd, ef):
    return ab + (cd, ef)

This concatenates a new tuple with (cd, ef) to the existing ab tuple.

For different patterns, you'll need to test the values; if all you ever get is tuples or integers, and the tuples are not nested, then that's as simple as:

def checkio(*args):
    result = []
    for value in args:
        if isinstante(value, tuple):
            result += value
        else:
            result.append(value)
    return tuple(result)

You can fight recursion with recursion; if the tuples can contain other tuples, flatten them with a recursive function:

def checkio(*args):
    result = []
    for value in args:
        if isinstante(value, tuple):
            result += checkio(*value)
        else:
            result.append(value)
    return tuple(result)

If the pattern is always tuple which can be one of 2:

  • Tuple
  • Number

you can do the following more generic solution:

my_tuple = ((10.2, -2.2, 0, 1.1, 0.5), 12.4, 3)
my_list = []
for v in my_tuple:
    if isinstance(v, tuple):
        my_list.extend += v
    else:
        my_list.append(v)

print my_list

Output:

[10.2, -2.2, 0, 1.1, 0.5, 12.4, 3]

It's a question of pattern and how your data is struct.

Have you tried this:

a = (1,2,3)
b = [*a]
print(b)

it converts the tuple to list. or simply print(*a)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM