Reputation: 1403
I am new to Python, and I am trying to check whether a pair [a,b]
exists in a list l=[[a,b],[c,d],[d,e]]
. I searched many questions, but couldn't find precise solution. Please can someone tell me the right and shortest way of doing it?
when i run :
a=[['1','2'],['1','3']]
for i in range(3):
for j in range(3):
if [i,j] in a:
print a
OUTPUT IS BLANK
how to achieve this then?
Upvotes: 16
Views: 80133
Reputation: 23
a=[['1','2'],['1','3']]
[[x,y] for x, y in a if [x,y] == ['1','3']]
As per my understanding of you question, you were trying to find a specific list within another list.
for example ['1', '3'] within a. using list comprehension you can solve this.
Upvotes: 0
Reputation: 2001
Don't forget that [a, b] is not [b, a] in python so you might want to order the 2 values in your tuples if you want to consider [A, B] and [B, A] is the same:
You might also want to use set(your_list) if your list is big and it has redundancy.
In your code example you are compaing integers and strings :
['1', '2'] # this is a 2-list of strings '1' and '2'
[1, 2] # this is a 2-list of integers 1 and 2
Upvotes: -2
Reputation: 34312
The code does not work because '1' != 1
and, consequently, ['1','2'] != [1,2]
If you want it to work, try:
a=[['1','2'],['1','3']]
for i in range(3):
for j in range(3):
if [str(i), str(j)] in a: # Note str
print a
(But using in
or sets as already mentioned is better)
Upvotes: 10
Reputation: 65851
In my interpreter (IPython 0.10, Python 2.7.2+) your code gives the correct output:
In [4]: a=[[1,2],[1,3]]
In [5]: for i in range(3):
...: for j in range(3):
...: if [i,j] in a:
...: print a
...:
[[1, 2], [1, 3]]
(This should be a comment, but I can't leave them yet.)
EDIT:
Turns out you had strings in the a
list.
Then you need to convert your int
s to str
as well:
a=[['1','2'],['1','3']]
for i in range(3):
for j in range(3):
if [str(i), str(j)] in a:
print a
Upvotes: -2
Reputation: 117886
Here is an example:
>>> [3, 4] in [[2, 1], [3, 4]]
True
If you need to do this a lot of times consider using a set
though, because it has a much faster containment check.
Upvotes: 29