qxphm
qxphm

Reputation: 19

Go through all possibilities Python

I have two lists, let's say:

l1 = ['c', 'o', 'k', 'e']
l2 = ['a', 'b', 'c', 'd']

I would like to create a loop, that would check if each letter in l1 is in l2 (if that's the case I would get " ") or if it's there and on the same position (in that case I would get "Y").

I started with this code (unfortunately I failed). Could you please advise what's missing?

     for i in l1:
        for j in range(0,4):
            if l1[j] == l2[j]:
                v = "Y"
            elif i in l2:
                v = "."
            else:
                v = "N"
            text = "".join(v)
        

Which those lists in the example, I would assume to get:

text = .NNN

I understand that this might be an easy question, but I'm a beginner and it's driving me crazy :)

Upvotes: 1

Views: 98

Answers (6)

user19199281
user19199281

Reputation: 1

l1 = ['c', 'o', 'k', 'e']
l2 = ['a', 'b', 'c', 'd']

text = ""
for char in l1:
  if char in l2:
    index = l1.index(char)
    if char == l2[index]:
      v = "Y"
    else:
      v = "."
  else:
    v = "N"
  text += v

print(text)

Upvotes: 0

mozway
mozway

Reputation: 260380

Use python sets.

Simple ./N check

l1 = ['c', 'o', 'k', 'e']
l2 = ['a', 'b', 'c', 'd']

S = set(l2)

out = ''.join('.' if x in S else 'N' for x in l1)

output: .NNN

more complex ./Y/N check:

l1 = ['c', 'o', 'k', 'e', 'z']
l2 = ['a', 'b', 'c', 'd', 'z']

S = set(l2)

out = ''.join(('Y' if l2[i]==x else '.') if x in S else 'N'
              for i, x in enumerate(l1))

output: .NNNY

Upvotes: 1

Ethan Van den Bleeken
Ethan Van den Bleeken

Reputation: 378

You don't have to loop trough the second array with the operations you are performing. You can simplify your code like this.

l1 = ['c', 'o', 'k', 'e']
l2 = ['a', 'b', 'c', 'd']

text = ""
for i in range(len(l1)):
    if l1[i] == l2[i]:
        text += "Y"
    elif l1[i] in l2:
        text += "."
    else:
        text += "N"
        
print(text)

Looping twice is not needed and therefore not the most efficient solution to your problem.

Upvotes: 1

Keegan Cowle
Keegan Cowle

Reputation: 2479

l1 = ['c', 'o', 'k', 'e']
l2 = ['a', 'b', 'c', 'd']

text = ""
for i in l1:
    if i in l2:
        v = "."
    else:
        v = "N"
    text += v
print(text)

First we define text="" so that we can just append. Then we loop all the letters in l1. We then check if that letter is in l2. if it is we add '.' to text if its not we add N. And finally we print the text

Upvotes: 2

user2261062
user2261062

Reputation:

You can do something like:

ans = ""
for i, val in enumerate(l1):
    if l2[i] == val:
        ans += "Y"
    elif val in l2:
        ans += "."
    else
        ans += "N"

Upvotes: 1

Andrej Kesely
Andrej Kesely

Reputation: 195418

Looking at your code, you can use zip() to iterate over the two lists simultaneously. Also use str.join after the loop:

l1 = ["c", "o", "k", "e"]
l2 = ["a", "b", "c", "d"]

out = []
for a, b in zip(l1, l2):
    if a == b:
        out.append("Y")
    elif a in l2:
        out.append(".")
    else:
        out.append("N")

print("".join(out))

Prints:

.NNN

Upvotes: 3

Related Questions