Function Repository Resource:

ContainsOrderedItemsQ

Source Notebook

Test whether a list contains a subsequence without requiring the subsequence to be in a single sequence

Contributed by: Jon McLoone, Daniel Robinson

ResourceFunction["ContainsOrderedItemsQ"][list1,list2]

returns True if the elements of list2 all occur in the same order within list1, and False otherwise.

Examples

Basic Examples (2) 

The numbers 1, 4 and 2 occur in this order in the sequence 1, 2, 3, 4, 3, 2, 1:

In[1]:=
ResourceFunction[
 "ContainsOrderedItemsQ"][{1, 2, 3, 4, 3, 2, 1}, {1, 4, 2}]
Out[1]=

The numbers 2, 1, 2 appear in the same sequence but not in this order:

In[2]:=
ResourceFunction[
 "ContainsOrderedItemsQ"][{1, 2, 3, 4, 3, 2, 1}, {2, 1, 2}]
Out[2]=

Check a list of digits for a range of sequential integers:

In[3]:=
ResourceFunction["ContainsOrderedItemsQ"][IntegerDigits[2^27], Reverse[Range[9]]]
Out[3]=
In[4]:=
ResourceFunction[
 "ContainsOrderedItemsQ"][{4, 2, 9, 4, 9, 6, 7, 2, 9, 6}, Range[9]]
Out[4]=

Scope (1) 

Strings are automatically converted to lists of characters:

In[5]:=
ResourceFunction["ContainsOrderedItemsQ"]["This is text", "his text"]
Out[5]=

Properties and Relations (2) 

ContainsOrderedItemsQ is different from SequenceCount and related functions because it allows the subsequence to be interrupted:

In[6]:=
ResourceFunction["ContainsOrderedItemsQ"][{1, 2, 3, 4, 5}, {1, 2}]
Out[6]=
In[7]:=
ResourceFunction["ContainsOrderedItemsQ"][{1, 2, 3, 4, 5}, {1, 5}]
Out[7]=

SequenceCount, on the other hand, requires the sequence to be together:

In[8]:=
SequenceCount[{1, 2, 3, 4, 5}, {1, 2}]
Out[8]=
In[9]:=
SequenceCount[{1, 2, 3, 4, 5}, {1, 5}]
Out[9]=

Publisher

Jon McLoone

Requirements

Wolfram Language 13.0 (December 2021) or above

Version History

  • 1.0.1 – 13 March 2024
  • 1.0.0 – 13 March 2023

Related Resources

License Information