miik
miik

Reputation: 663

removing something from a list of tuples

Say I have a list:

[(12,34,1),(123,34,1),(21,23,1)]

I want to remove the 1 from each tuple in the list so it becomes

[(12,34),(123,34),(21,23)]

Upvotes: 1

Views: 136

Answers (5)

raton
raton

Reputation: 428

     python 3.2

    1. [(i,v)for i,v,c in list1]

    2. list(map(lambda x:x[:2],list1))

Upvotes: 0

Darknight
Darknight

Reputation: 1152

>>> a=[(12, 34, 1), (123, 34, 1), (21, 23, 1)]
>>> [filter (lambda a: a != 1, x) for x in a]
[(12, 34), (123, 34), (21, 23)]

THis will remove all 1 from the tuple irrespective of index

Upvotes: 1

Rushy Panchal
Rushy Panchal

Reputation: 17532

Since you can't change tuples (as they are immutable), I suggest using a list of lists:

my_list = [[12,34,1],[123,34,1],[21,23,1]]
for i in my_list:
    i.remove(1)
return my_list

This returns: [[12, 34], [123, 34], [21, 21]].

Upvotes: 0

Faruk Sahin
Faruk Sahin

Reputation: 8726

Tuples are immutable, so you can not remove an item. However, you can create a new tuple from the old tuple not including the elements you do not want to. So, to delete an arbitrary item from each tuple from a list of tuples, you can do:

def deleteItem(lst, toDel):
    return [tuple(x for x in y if x != toDel) for y in lst]

Result:

>>> lst = [(12,34,1),(123,34,1),(21,23,1)]
>>> deleteItem(lst, 1)
[(12, 34), (123, 34), (21, 23)]

Upvotes: 2

Martijn Pieters
Martijn Pieters

Reputation: 1121814

You want to truncate your tuples, use a list comprehension:

[t[:-1] for t in listoftuples]

or, as a simple demonstration:

>>> listoftuples = [(12,34,1),(123,34,1),(21,23,1)]
>>> [t[:-1] for t in listoftuples]
[(12, 34), (123, 34), (21, 23)]

Upvotes: 3

Related Questions