flattening a list or a tuple in python. Not sure what the error is

2024/10/13 12:23:41
def flatten(t):list = []for i in t:if(type(i) != list and type(i) != tuple):list.append(i)else:list.extend(flatten(i))return list

Here is the function that I've written to flatten a list or a tuple that looks something like

l = ((5, (1,2), [[1],[2]]))

when I do

flatten(l)

I expected to get a list

[5, 1, 2, 1, 2]

but I instead get

[5, 1, 2, [[1], [2]]]

I am not really sure why this happens because

    else:list.extend(flatten(i))

this part of the code will retrieve the int inside the third element of the tuple which is [[1],[2]] by calling it recursively. What am I missing here?

Thanks

Answer

You've assigned the built-in list to a list instance in your function, so the type check no longer works properly for list objects.

You should use a different name for the accumulator list, say, lst:

def flatten(t):lst = []for i in t:if type(i) != list and type(i) != tuple:lst.append(i)else:lst.extend(flatten(i))return lst

OTOH, you could do both checks at once using isinstance which also ensures that the objects you're running your checks against are actually types:

...
if not isinstance(i, (list, tuple)):...
https://en.xdnf.cn/q/118084.html

Related Q&A

Counting word occurrences in csv and determine row appearances

I have a csv file such as the following in one column. The symbols and numbers are only to show that the file does not just contain text. I have two objectives:count the number of occurrences of a wo…

Converting Python 3.6 script to .exe? [duplicate]

This question already has answers here:How can I convert a .py to .exe for Python?(8 answers)Closed 6 years ago.I would like to convert a .py file to an .exe. I am using Python 3.6. I already tried py…

Error while reading csv file in python

I tried to run following programme in ubuntu terminal but I am getting some error. But it is not giving any error in jupyter notebookFile "imsl.py", line 5 SyntaxError: Non-ASCII character \x…

Searching for a USB in Python is returning there is no disk in drive

I wrote up a function in Python that looks for a USB drive based on a key identifier file, however when called upon it returns There is no disk in the drive. Please insert a disk into drive D:/ (which …

Counting phrases in Python using NLTK

I am trying to get a phrase count from a text file but so far I am only able to obtain a word count (see below). I need to extend this logic to count the number of times a two-word phrase appears in th…

Break python list into multiple lists, shuffle each lists separately [duplicate]

This question already has answers here:Shuffling a list of objects [duplicate](26 answers)Closed 7 years ago.Lets say I have posts in ordered list according to their date.[<Post: 6>, <Post: 5&…

AlterField on auto generated _ptr field in migration causes FieldError

I have two models:# app1 class ParentModel(models.Model):# some fieldsNow, in another app, I have child model:# app2 from app1.models import ParentModelclass ChildModel(ParentModel):# some fields here …

How do I replace values in 2D numpy array using a dictionary of {value:(row#,column#)} pairs

import numpy as npthe array looks like so:array = np.zeros((10,10))array = [ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.][ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.][ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.][ 0…

Processing items with Scrapy pipeline

Im running Scrapy from a Python script.I was told that in Scrapy, responses are built in parse()and further processed in pipeline.py. This is how my framework is set so far:Python scriptdef script(self…

How to click a button to vote with python

Im practicing with web scraping in python. Id like to press a button on a site that votes an item. Here is the code<html> <head></head> <body role="document"> <div …