14

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?

sum2000
  • 1,363
  • 5
  • 21
  • 36

5 Answers5

26

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.

orlp
  • 112,504
  • 36
  • 218
  • 315
  • i am using nested loops for `i in range(3):` and `for j in range(3)` and then trying for `[i,j] in a`....but its not identifying – sum2000 Mar 11 '12 at 11:36
10

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)

bereal
  • 32,519
  • 6
  • 58
  • 104
0
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.

  • 1
    Answer needs supporting information Your answer could be improved with additional supporting information. Please [edit] to add further details, such as citations or documentation, so that others can confirm that your answer is correct. You can find more information on how to write good answers [in the help center](https://stackoverflow.com/help/how-to-answer). – moken Jul 23 '23 at 11:41
-2

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 ints 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
Lev Levitsky
  • 63,701
  • 20
  • 147
  • 175
-2

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
Félix Cantournet
  • 1,941
  • 13
  • 17