从列表中删除重复项并使用python对其排序

2024-05-08 03:47:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我目前正在学习python,在做老师提供的练习时遇到了一些问题。所以我有一个txt文件包含一个如下所示的名字列表

Noah

Liam

Madison

Jayden

Elizabeth

Jacob

Mia

Noah

Angelia

Bob

Cindy

我应该从列表中删除重复项,例如列表中有2个“Noah”,我应该删除其中一个并返回一个按字母顺序排序的列表,例如

^{pr2}$

。。。。在

我在网上搜索过,知道我们应用set的方法。 但是我的老师在评论中说

 for n in open('class_list.txt'):
# TODO: do something with n.strip() "

我不明白为什么在这里使用strip函数?如果我写n.strip('Noah'),strip函数不只是简单地从列表中删除2个相同的字符串吗?还是我错误地解释和使用了脱衣舞?在


Tags: 文件函数txt列表老师名字stripliam
3条回答

我怀疑你的老师是不是想用strip()消除重复,而是去掉名字后面的空格。 既然这看起来像是一个家庭作业问题,我不会给你答案,但我会尽力为你指出正确的方向。在

您可能应该知道如何使用file = open("file")或{}读取数据。所以,有了一个名字列表,我们就可以消除重复。但是,这个词可能在每个词的末尾包含一些讨厌的字符(\n尤其是对于换行符)。为了避开这个问题,调用word.strip(),它会破坏结尾不必要的字符和空白。所以,当你找到一个单词列表时,执行如下操作

for i in names:
    i = i.strip()

正如您所说的使用集合,但是,集合是无序的数据类型,因此当您将一个列表转换为一个集合(使用set(list)list(set)),然后将集合还原为列表,顺序将丢失。但是,它很容易被一个方便的python函数sorted(list)恢复,该函数将为您按字母顺序对名称进行排序。在

然后打印列表就变得很简单了,它的效果是

^{pr2}$

如果你不熟悉的话, 例如(这不是很有效):


  1. 保留一个空的名称列表以存储您已经看到的名称(seen
  2. 迭代你的名字列表,并为每个名字

    1. 如果名字在seen中,list.pop(name)则从你的名字列表中选择它。在
    2. 如果不是,请使用seen.append将其添加到seen
  3. 打印列表!在

set添加名称并对其排序。在

names = set()
with open('class_list.txt') as f:
    for line in f:
        if line.strip():
            names.add(line.strip())

print('\n'.join(sorted(names)))
  • 在插入过程中处理重复项
  • 不需要额外的in比较

使用str.strip是为了在从文件中读入行时消除尾随的换行。在

是的,你把str.strip()解释错了。它的作用是删除行首和行尾的所有空白。你想做的就是这样

names = []
with open(filename, 'r') as f:
    for line in f:
        if line not in names:
            names.append(line.strip())
for name in names.sort():
    print name

它的作用是打开一个带有名称的文件。然后迭代每一行,每行都是一个名称。检查是否已经看到该名称,如果没有,则将其添加到names。最后,将唯一的名字排序并打印出来。在

相关问题 更多 >