Вывод элементов из массива строк в предложение - PullRequest
1 голос
/ 17 июня 2019

Код должен выводить строковые элементы из списка B при печати чего-либо из списка A.

Скажем, у нас есть

text = ""
letters = ["a", "b", "c"]
names = ["Abby", "Bob", "Carl"]

Как перебирать списки, чтобы при обновлении текста до

text = "a"
output: Abby

text = "ab"
output: "AbbyBob

text = "cab"
output: "CarlAbbyBob"

Я пытался подумать об операторе if внутри цикла foor, но не могу его понять. Я упростил задачу до трех элементов для этого поста, но список содержит 30 элементов, поэтому цикл for был бы хорошей идеей.

Моя попытка

text = ""

for i in text:
    if i == letters[letters ==i]:
        text = text + names[i]

Ответы [ 5 ]

2 голосов
/ 17 июня 2019

Вы можете использовать dict для сопоставления буквы с именем

letter_to_name = dict()

for idx, val in enumerate(letters):
    letter_to_name[val] = names[idx]

#Creates are mapping of letters to name

#whatever is the input text, just iterate over it and select the val for that key

output = ""
for l in text:
    if l not in letter_to_name:
        #Handle this case or continue
    else:
        output += letter_to_name[l]
1 голос
/ 17 июня 2019

Я бы использовал dict для сопоставления одного с другим, а затем сделал бы конкатенацию:

dct = dict(zip(letters, names))  # {"a": "Abby", ...}
...
text = input()
output = ''.join(dct[char] for char in text)
print(output)

Вы можете использовать цикл for здесь, но понимание списка чище.

0 голосов
/ 17 июня 2019

https://www.w3schools.com/python/python_dictionaries.asp

Настройка словаря:

thisdict =  {
  "a": "Abbey",
  "b": "Bob",
  "c": "Carl"
}

Затем создайте цикл для вашей строки

string= 'abc'
''.join(thisdict[char] for char in string)


>>>>AbbeyBobCarl
0 голосов
/ 17 июня 2019

Вы можете сделать:

output = ''.join([names[i] for r in text for i in [ letters.index(r)]])
# or output = ''.join([names[letters.index(r)] for r in text])

Дает:

In [110]: letters = ["a", "b", "c"]
     ...: names = ["Abby", "Bob", "Carl"]
     ...:

In [111]: ''.join([names[i] for r in text for i in [ letters.index(r)]])
Out[111]: 'AbbyBobBob'
0 голосов
/ 17 июня 2019
text = ['a', 'bc', 'cab', 'x']
letters = ["a", "b", "c"]
names = ["Abby", "Bob", "Carl"]

d = {k: v for k, v in zip(letters, names)}
s = [(t, ''.join(d[c] for c in t if c in d)) for t in text]

for l, t in s:
    print('text =', l)
    print('output:', t)

Печать:

text = a
output: Abby
text = bc
output: BobCarl
text = cab
output: CarlAbbyBob
text = x
output: 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...