Python Forum
using element on a list as condition statement
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
using element on a list as condition statement
(May-20-2020, 12:12 PM)hussainmujtaba Wrote: A list can have the same element multiple times, when converting it to a set, it ll only contain element once. Thus the search space has decreased and it 'll be faster.

This really isn't correct reasoning. Consider a list of length n containing unique items. The performance of the search isn't going to be the same as for a set. With a list, you either have to do a search through the entire thing to find the item you want (which at worst takes time proportional to n, hence why this is called a linear search) or if the list is sorted, perform a binary search (which at worst takes time proportional to log_2 n). Sets are based on hash tables, meaning that items are stored in buckets based on their hash value (a number representing them). Searching for an item means computing its hash (which should be fast!) and then using that as an index into this table, which is an array-like thing, meaning that looking up something by index (and consequently search) is done in constant time (i.e. independent of n). I suspect the constants of proportionality here mean that the difference is going to be noticeable only for sufficiently large n.
(May-20-2020, 02:40 PM)perfringo Wrote:
(May-20-2020, 12:12 PM)hussainmujtaba Wrote: It is more efficient if you convert your list to a set just for comparison purpose. A list can have the same element multiple times, when converting it to a set, it ll only contain element once.

I think that using built-in any() is even more efficient approach. Due to short-circuiting nature it will stop if first match encountered. In real life scenarios this means that if there is a match you don't need to go through all items in list or convert whole list into set. One can craft such a code:

>>> target = 33
>>> lst = [11, 22, 33, 44, 55]  
>>> match = ['is not', 'is'][any(target == item for item in lst)]               
>>> f'{target} {match} in the list'                                             
'33 is in the list'                                                             
>>> target = 10                                                                 
>>> match = ['is not', 'is'][any(target == item for item in lst)]               
>>> f'{target} {match} in the list'                                             
'10 is not in the list'    
Instead of ['is not', 'is'] one can use ['not', ''] and put 'is' into string but it would be too cryptic for my taste.

I am pretty much sure that the both methods will take the exactly the same time to execute.You can check practically if you want

Possibly Related Threads…
Thread Author Replies Views Last Post
  Find (each) element from a list in a file tester_V 3 480 Nov-15-2022, 08:40 PM
Last Post: tester_V
  –°heck if an element from a list is in another list that contains a namedtuple elnk 8 612 Oct-26-2022, 04:03 PM
Last Post: deanhystad
  Membership test for an element in a list that is a dict value for a particular key? Mark17 2 650 Jul-01-2022, 10:52 PM
Last Post: Pedroski55
  List Creation and Position of Continue Statement In Regular Expression Code new_coder_231013 3 971 Jun-15-2022, 12:00 PM
Last Post: new_coder_231013
  How to find the second lowest element in the list? Anonymous 3 754 May-31-2022, 01:58 PM
Last Post: Larz60+
  check if element is in a list in a dictionary value ambrozote 4 1,077 May-11-2022, 06:05 PM
Last Post: deanhystad
  select Eof extension files based on text list of filenames with if condition RolanRoll 1 938 Apr-04-2022, 09:29 PM
Last Post: Larz60+
  Change a list to integer so I can use IF statement buckssg 3 1,628 Sep-21-2021, 02:58 AM
Last Post: bowlofred
  sorting a list of lists by an element leapcfm 3 1,281 Sep-10-2021, 03:33 PM
Last Post: leapcfm
  How to invoke a function with return statement in list comprehension? maiya 4 1,811 Jul-17-2021, 04:30 PM
Last Post: maiya

Forum Jump:

User Panel Messages

Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020