feature request: string.contains('...')

Tim Chase python.list at tim.thechases.com
Fri Sep 24 20:45:26 CEST 2010


On 09/24/10 13:01, Ethan Furman wrote:
> John Posner wrote:
>> Another "missing feature" candidate: sublist
>>
>>     >>>  'bc' in 'abcde'
>>     True
>>     >>>  list('bc') in list('abcde')
>>     False
>
> I'm not aware of any idioms, but how about a simple function?
>
> def listinlist(list1, list2):
>       "checks if list1 is in list2"
>       if not list1:
>           return True
>       if not list2:
>           return False
>       length = len(list1)
>       pos = 0
>       while True:
>           try:
>               pos = list2.index(list1[0], pos)
>           except ValueError:
>               return False
>           if list2[pos:pos+length] == list1:
>               return True
>           pos += 1

Which I suppose could be rewritten something like

  def listinlist(l1, l2):
    len1 = len(l1)
    offsets_to_consider = 1 + len(l2) - len1
    return any(
      l1 == l2[i:i+len1]
      for i in xrange(offsets_to_consider)
      )

Foldable into a one-line version if one's sick enough to use it:

   list_in_list = lambda l1, l2: any(l1 == l2[i:i+len(l1)] for i 
in range(1 + len(l2) - len(l1)))

-tkc







More information about the Python-list mailing list