gpt4 book ai didi

获取两个列表相交的项目索引的Pythonic方法

转载 作者:行者123 更新时间:2023-11-28 22:20:43 25 4
gpt4 key购买 nike

假设我有两个列表:一个是字符串 -- 'example',另一个是字母表。我想找到一种更 pythonic 的方式,其中字母表中的每个位置都列出字符串列表 'example' 的每个字母相交并将这些索引放入列表中。 IE。

  • e : 4
  • x : 23
  • 一个:0
  • 米:12

等...

到目前为止我有:

import string
alphabet = list(string.ascii_lowercase)
key = list('example')

def convert(string, alphabet):
table_l = []
for char in string:
for letter in alphabet:
if letter == char:
table_l.append(alphabet.index(letter))
return table_l

convert(key, alphabet)

我试过使用集合交集,但字符串 'key' 可以包含每个字母不止 1 个,我正在寻找索引,而不是匹配哪些字母。

到目前为止,我尝试过的最好的是:

for x in key:
listed.append(set(alphabet).intersection(x))

我不知道如何在值与键的每个字母相交的地方附加字母键。

谢谢

最佳答案

你想要一个从字母到数字的映射,所以使用一个映射数据结构,例如一个字典:

>>> alphamap = dict(zip(alphabet, range(len(alphabet)))
>>> alphamap
{'h': 7, 'e': 4, 'g': 6, 'n': 13, 'm': 12, 's': 18, 'x': 23, 'r': 17, 'o': 14, 'f': 5, 'a': 0, 'v': 21, 't': 19, 'd': 3, 'j': 9, 'l': 11, 'b': 1, 'u': 20, 'y': 24, 'q': 16, 'k': 10, 'c': 2, 'w': 22, 'p': 15, 'i': 8, 'z': 25}
>>> def convert(string, map_):
... return [map_[c] for c in string]
...
>>> convert('example', alphamap)
[4, 23, 0, 12, 15, 11, 4]

请注意,您原来的方法可以简化为:

>>> list(map(alphabet.index, 'example'))
[4, 23, 0, 12, 15, 11, 4]

但是,使用 alphabet.index 比使用映射效率低(因为它每次都必须进行线性搜索而不是恒定时间散列)。

另外,请注意,我已经直接遍历了字符串,无需将它们放入列表中,字符串是序列,就像list 对象一样。它们可以迭代、切片等。但是,它们是不可变的。

最后,如果没有相应的值,即特殊的非字母字符,上述方法将失败。

>>> convert("example!", alphamap)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 2, in convert
File "<stdin>", line 2, in <listcomp>
KeyError: '!'

这可能是可取的,也可能不是可取的。或者,您可以通过使用带有默认值的 .get 来解决这个问题,例如:

>>> def convert(string, map_, default=-1):
... return [map_.get(c, default) for c in string]
...
>>> convert("example!", alphamap)
[4, 23, 0, 12, 15, 11, 4, -1]

关于获取两个列表相交的项目索引的Pythonic方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48757801/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com