为什么 Python 的 map() 函数会在每次返回时交换值的位置?

0 python

我正在学习 python 并尝试学习如何使用 map() 函数。

有想法将字符串中的字母更改为字母表中的等效 +1,例如:abc -> bcd

写了以下代码:

m = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']


def func(s):
    return m[m.index(s) + 1]

l = "abc"

print(set(map(func, l)))
Run Code Online (Sandbox Code Playgroud)

但是每次执行都会返回不同的字母顺序

我通过使用得到了预期的答案:

l2 = [func(i) for i in s]
print(l2)
Run Code Online (Sandbox Code Playgroud)

但我想了解 map() 函数及其工作原理。试图阅读文档,但我不太明白。很抱歉我的英语不好和我缺乏 python 经验:/

小智 5

这是因为您正在转换为setinset(map(func, l))并且set是 Python 中的无序集合。

文档

集合对象是不同的可散列对象的无序集合......作为无序集合,集合不记录元素位置或插入顺序。因此,集合不支持索引、切片或其他类似序列的行为。

如果您替换print(set(map(func, l)))print(list(map(func, l))),您将不会看到这种行为。