# [Tutor] problem solving with lists

Dennis Lee Bieber wlfraed at ix.netcom.com
Fri Mar 18 11:34:27 EDT 2022

```On Fri, 18 Mar 2022 14:07:00 +0100, <marcus.luetolf at bluewin.ch> declaimed
the following:

>
>>lst = [['a', 'b', 'c'], ['d', 'e', 'f'], ['a', 'b', 'g'], ['b', 'c', 'h']]
>
>>n = len(lst)
>>p = 0
>>new_lst = []
>>while n > 0:
>>    pair1 = lst[p][0:2]
>>    pair2 = list(lst[p][0]+ lst[p][2])
>>    pair3 = lst[p][1:]

ONE: this is not scaleable... You are hard-coded to working with
elements of exactly length three...

TWO: your definition of pair2 seems to imply that pairs are NOT
provided an answer to that question -- even after having been asked
multiple times.

If pairs are not required to be adjacent letters, then testing with
"in" will not suffice. Set intersection is the best solution for disjoint
pairs.

>>    print('pair1:', pair1, 'pair2: ', pair2, 'pair3: ', pair3)
>>    if pair1 or pair2 or pair3 not in new_lst:

This does not do anything like you think it does. It is parsed as

if (pair1)
OR (pair2)
OR (pair3 not in new_lst)

and since a non-empty list is "true", "pair1" by itself determines the
condition and pair2/pair3 aren't even looked at...

https://docs.python.org/3/reference/expressions.html#membership-test-operations
https://docs.python.org/3/reference/expressions.html#boolean-operations

--
Wulfraed                 Dennis Lee Bieber         AF6VN
wlfraed at ix.netcom.com    http://wlfraed.microdiversity.freeddns.org/

```