why tuple instead of list - Printable Version +- Python Forum (https://python-forum.io) +-- Forum: General (https://python-forum.io/forum-1.html) +--- Forum: News and Discussions (https://python-forum.io/forum-31.html) +--- Thread: why tuple instead of list (/thread-24453.html) Pages:
1
2
|
why tuple instead of list - Skaperen - Feb-14-2020 why should i want to create a tuple instead of a list? or a frozenset instead of a set? or a namedtuple instead of a dictionary? are they more efficient? are they faster? do they use less memory? are they considered more pythonic for some reason? RE: why tuple insyead of list - ndc85430 - Feb-15-2020 Immutability is, in general, a good idea. Some of the reasons why are explained here. OK, the examples are in PHP but the ideas are the same. I work daily in Scala (and sometimes other languages) where immutability is the default and can't say I miss mutability! RE: why tuple insyead of list - Skaperen - Feb-16-2020 then it should be allowed to morph a mutable object into its immutable form, in place, without the transient memory expansion of creating a new copy. just don't change the mutable object. make your code do what it would do if the object is immutable. you can make a new copy of a mutable object, too. so what about simple cases where i have lots of large lists i don't change, like after reading in a file. is there a reason to use tuples instead pf lists? RE: why tuple insyead of list - buran - Feb-16-2020 when reading from file, it may make sense to unpack each line into named tuple. It makes the code more readable after that. Of course assuming there is no more complicated custom class, instead of using named tuple. RE: why tuple insyead of list - Skaperen - Feb-17-2020 how is the code more readable? if it is that the way of coding around a tuple is easier to read, then just do the same way around a list. RE: why tuple insyead of list - buran - Feb-17-2020 I said namedtuple, not tuple. For example population.csv Compare 4 snippetsimport csv from collections import namedtuple with open('population.csv') as f: next(f) # skip header for line in f: line = line.strip().split(',') print(f'Population of {line[0]}, {line[1]} is {line[2]}') with open('population.csv', newline='') as f: rdr = csv.reader(f) next(rdr) # skip header for line in rdr: print(f'Population of {line[0]}, {line[1]} is {line[2]}') with open('population.csv', newline='') as f: rdr = csv.DictReader(f) for city in rdr: print(f"Population of {city['name']}, {city['state']} is {city['population']}") City = namedtuple('City', 'name state population') with open('population.csv', newline='') as f: rdr = csv.DictReader(f) for record in rdr: city = City(**record) print(f"Population of {city.name}, {city.state} is {city.population}")This is very basic example (assuming no suitable custom class to use), but you get the idea. Imagine, you are not just printing elements. In the last two snippets, if you just print city, the namedtuple is more readble than dhe dict vs There is discussion about enhancement to csv module, to have a reader that returns nameduples, not dicts.https://bugs.python.org/issue1818 But not sure what the current state is Also instead of returning list/tuple from function, it is better to return namedtuple instead Overall, using namedtuple instead of just tuple/list makes the element access and code readability better RE: why tuple instead of list - DeaD_EyE - Feb-17-2020 Funny thing, today I used namedtuples from header. You can use starmap from itertools. import csv from collections import namedtuple from pathlib import Path from itertools import starmap def read_nt(csv_file): with csv_file.open() as fd: reader = csv.reader(fd, delimiter=",") header = namedtuple("Header", next(reader)) for row in starmap(header, reader): yield row # you have to change the path csv_file = Path.home() / "Desktop/akku.csv" for row in read_nt(csv_file): print(row)It would be nice, to have this inside the csv-module. RE: why tuple instead of list - buran - Feb-17-2020 even better than my example :-) RE: why tuple instead of list - Skaperen - Feb-18-2020 so what's the advantage of a namedtuple over a namedlist ... err ... i mean, over a dictionary? RE: why tuple instead of list - DeaD_EyE - Feb-18-2020 Consumer which receives namedtuples: csv_file = Path.home() / "Desktop/akku.csv" for row in read_nt(csv_file): print("Row ID:", row.row) print("Voltage:", row.voltage) print("Current:", row.current) print("Charge:", row.charge) print("Temp °C:", row.temperature)Consumer, which receives dicts: csv_file = Path.home() / "Desktop/akku.csv" for row in read_nt(csv_file): print("Row ID:", row["row"]) print("Voltage:", row["voltage"]) print("Current:", row["current"]) print("Charge:", row["charge"]) print("Temp °C:", row["temperature"])The namedtuple allows you attribute-access, the dict not. |