in some contextslike return statementit is syntactically simpler to create tuple than list in other contextsyou might prefer list if you want to use sequence as dictionary keyyou have to use an immutable type like tuple or string if you are passing sequence as an argument to functionusing tuples reduces the potential for unexpected behavior due to aliasing because tuples are immutablethey don' provide methods like sort and reversewhich modify existing lists however python provides the built-in functions sorted and reversedwhich take any sequence as parameter and return new sequence with the same elements in different order list comprehension sometimes you want to create sequence by using data from another sequence you can achieve this by writing for loop and appending one item at time for exampleif you wanted to convert list of strings each string storing digits into numbers that you can sum upyou would writelist_of_ints_in_strings [' '' '' 'list_of_ints [for in list_of_ints_in_stringslist_of_ints append(int( )print(sum(list_of_ints)with list comprehensionthe above code can be written in more compact mannerlist_of_ints_in_strings [' '' '' 'list_of_ints int(xfor in list_of_ints_in_strings print(sum(list_of_ints) debugging listsdictionaries and tuples are known generically as data structuresin this we are starting to see compound data structureslike lists of tuplesand dictionaries that contain tuples as keys and lists as values compound data structures are usefulbut they are prone to what call shape errorsthat iserrors caused when data structure has the wrong typesizeor compositionor perhaps you write some code and forget the shape of your data and introduce an error for exampleif you are expecting list with one integer and give you plain old integer (not in list)it won' work