Huy*_*ang 5 python list-comprehension
我有一个清单word_list = ['cat', 'dog', 'rabbit']。我想使用列表理解来打印列表中的每个单独字符,但删除任何重复的字符。这是我的代码:
word_list = ['cat', 'dog', 'rabbit']
letter_list = [""]
letter_list = [letter for word in word_list for letter in word if letter not in letter_list ]
print(letter_list)
Run Code Online (Sandbox Code Playgroud)
这返回的['c', 'a', 't', 'd', 'o', 'g', 'r', 'a', 'b', 'b', 'i', 't']结果不是期望的结果['c', 'a', 't', 'd', 'o', 'g', 'r', 'b', 'i'],我不明白为什么。
如果允许初始化某些变量,那么在技术上可以通过列表理解来实现重复数据删除。
\n您可以使用一个集合seen来跟踪已经遇到的字母,并使用一个集合include来记录当前字母在添加到集合之前是否已经见过seen:
seen = set()\ninclude = set()\nprint([\n letter for word in word_list for letter in word\n if (\n include.clear() if letter in seen else include.add(1),\n seen.add(letter)\n ) and include\n])\nRun Code Online (Sandbox Code Playgroud)\n从 Python 3.8 开始,您还可以使用赋值表达式来避免依赖函数的副作用,这在列表理解中通常不鼓励:
\nseen = set()\nprint([\n letter for word in word_list for letter in word\n if (\n include := letter not in seen,\n seen := seen | {letter}\n ) and include\n])\nRun Code Online (Sandbox Code Playgroud)\n但是,如果您不打算使用列表理解来实现重复数据删除,那么使用该dict.fromkeys方法会更干净,因为自 Python 3.7 以来 dict 键始终是唯一的并且遵循插入顺序:
from itertools import chain\nprint([*{}.fromkeys(chain(*word_list))])\nRun Code Online (Sandbox Code Playgroud)\n演示:在线尝试!
\n| 归档时间: |
|
| 查看次数: |
103 次 |
| 最近记录: |