为列表中的每个字符串分配一个数字。 Python 3.6

时间:2018-01-13 18:38:55

标签: python string python-3.x

我正在尝试编写一个接受输入的代码,将其拆分为一个列表,然后为列表中的每个字符串分配一个数字。

例如:如果我的输入是“hello hello goodbye hello”那么它会输出“1121”。

这是我到目前为止编写的代码:

sentence = input("What is your sentence? ").lower()
list_s = str.split(sentence)
for i in range(len(list_s)):

3 个答案:

答案 0 :(得分:2)

使用包含字符串作为键的字典和数字作为值:

inp = 'hello hello world hello'
d = {}
idx = 1
for word in inp.lower().split():
    # If the word is in the dictionary print the corresponding number
    if word in d:
        print(d[word], end='')
    # Otherwise print the next number and add the number to the dictionary
    else:
        print(idx, end='')
        d[word] = idx
        idx += 1

我提出了字典,因为in操作非常快,需要存储2件事:字符串和值。使字典成为解决该问题的非常合适的数据结构。

如果你喜欢它更短,你可以使用列表理解(使用len(d)+1"技巧"来自trincots答案):

inp = 'hello hello world hello'
d = {}
result = [d.setdefault(word, len(d)+1) for word in inp.lower().split()]

其中result是包含[1, 1, 2, 1]的列表,您可以使用以下字符打印:

print(''.join(map(str, result)))

或者(感谢Stefan Pochmann提示):

print(*result, sep="")

答案 1 :(得分:2)

作为MSeifert,我会建议一本字典。添加新单词时,您可以根据字典的大小生成指定的数字。最终结果可以作为列表理解列表生成:

list_s = str.split("hello hello goodbye hello")
d = {} # a dictionary, which will store for each word a number
for word in list_s:
    if not word in d: # first time we see this word?
        d[word] = len(d)+1 # assign to this word a unique number
result = [d[word] for word in list_s] # translate each word to its unique number
print (result) # [1, 1, 2, 1]

答案 2 :(得分:0)

您可以使用set

def get_numbers(s):
   s = s.split()
   new_s = [a for i, a in enumerate(s) if a not in s[:i]]
   return [new_s.index(i)+1 for i in s]

l = ["hello hello goodbye hello", "hello goodbye hello hello"]
final_l = list(map(get_numbers, l))

输出:

[[1, 1, 2, 1], [1, 2, 1, 1]]