SASS loop to generate chained :not() from variables string

I have a long list of classes I wish to use in a couple of ways.

The list looks something like this (but much longer):

$my-components: '.some-component', '.some-other-component', '.another-component';

One of the ways I need to use this list of class names in SASS (scss), which I can't figure out, is to create a long chained selector of :not()s. The final rendered output should look like this:

.parent {
  > * {
    &:last-of-type:not(.some-component):not(.some-other-component):not(.another-component):not(etc) {
      // style rules
    }
  }
}

(The goal being to select the last child element of .parent that doesn't have one of the classes in the list).

Question: How can I make the above code DRY by using the $my-components variable?

Note 1: The loop's output needs to be able to be appended to that &:last-of-type, as in above example.

Note 2: I'm using the $my-components variable already in a different function, so I'd like to keep it in the same format if possible.

Note 3: I know this seems hacky and stupid, and that I should just give all of those elements a common shared class instead. But unfortunately I can not currently modify that part of the DOM.


Use a @each loop

scss:

$my-components: '.some-component', '.some-other-component', '.another-component';

.parent {
    > * {
        $selector: '';
        @each $component in $my-components {
            $selector: $selector + ":not(#{$component})"
        }
        &:last-of-type#{$selector} {
            color: blue;
        }    
    }
}

css:

.parent > *:last-of-type:not(.some-component):not(.some-other-component):not(.another-component) {
  color: blue;
}

What's happening ?

I define a new string variable $selector.
During the @each loop, I'm concatening the string with :not(#{$component}) to add your new selector.