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

从列表中删除重复项并使用python对其排序,python,list,sorting,Python,List,Sorting,我目前正在学习python和encourter问题,同时做老师提供的练习。因此,我有一个txt文件,其中包含如下所示的名称列表 Noah Liam Madison Jayden Elizabeth Jacob Mia Noah Angelia Bob Cindy 我应该从列表中删除重复项,例如列表中有2个“Noah”,我应该删除其中一个,然后返回按字母顺序排序的列表,例如 Angelia Bob Cindy 我在网上搜索过,知道我们使用set的方法。 然而,我的老师

我目前正在学习python和encourter问题,同时做老师提供的练习。因此,我有一个txt文件,其中包含如下所示的名称列表

Noah

Liam

Madison

Jayden

Elizabeth

Jacob

Mia

Noah

Angelia

Bob

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

Angelia

Bob

Cindy

我在网上搜索过,知道我们使用set的方法。 然而,我的老师在评论中指出

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

我不明白为什么在这里使用strip函数?如果我写n.strip('Noah'),strip函数不是仅仅从列表中删除2个相同的字符串吗?或者我是否错误地解释和使用了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

它的作用是打开一个有名称的文件。然后你迭代每一行,每一行都是一个名字。检查是否已看到该名称,如果未看到,则将其添加到
名称中。最后,对唯一的名称进行排序并打印。

是的,您错误地解释了
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 = set()
with open('class_list.txt') as f:
    for line in f:
        if line.strip():
            names.add(line.strip())

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



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

集合添加名称并对其排序

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)))
  • 在插入过程中处理重复项
比较中不需要额外的



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

我怀疑您的老师是否打算使用strip()来消除重复项,而是删除名称后的空格。 因为这看起来像是一个家庭作业问题,我不会给你答案,但我会尽力为你指出正确的方向

您可能知道如何读取数据,可以使用
file=open(“file”)
将open(“file”)作为f
。因此,有了一个名字列表,我们就可以着手消除重复。但是,该单词可能在每个单词的末尾包含一些讨厌的字符(
\n
,尤其是换行符)。为了避免这种情况,请调用
word.strip()
,这将销毁末尾不必要的字符和空格。所以,当你看到一个单词列表时,执行如下操作

for i in names:
    i = i.strip()
正如您所说,您知道如何使用集合,但是集合是无序的数据类型,因此当您将列表转换为集合(使用
set(list)
list(set)
),然后将集合转换回列表时,顺序将丢失。但是,它可以通过一个方便的python函数
sorted(list)
轻松恢复,该函数将按字母顺序为您排序名称

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

for i in names: #names is your list 
    print(i)
编辑:如果您不熟悉集合,有更容易理解的方法, 例如(这不是很有效):


  • 保留一个空的名称列表以存储您已经看到的名称(
    seed
  • 反复浏览您的姓名列表,并针对每个姓名

  • 如果名称位于
    中,请将其从您的名称列表中删除
  • 如果不是,则将其添加到
    seen
    seen。追加
  • 打印列表
    我怀疑你的老师是不是想用strip()来消除重复项,而是想去掉名字后面的空格。 因为这看起来像是一个家庭作业问题,我不会给你答案,但我会尽力为你指出正确的方向

    您可能知道如何读取数据,可以使用
    file=open(“file”)
    将open(“file”)作为f
    。因此,有了一个名字列表,我们就可以着手消除重复。但是,该单词可能在每个单词的末尾包含一些讨厌的字符(
    \n
    ,尤其是换行符)。为了避免这种情况,请调用
    word.strip()
    ,这将销毁末尾不必要的字符和空格。所以,当你看到一个单词列表时,执行如下操作

    for i in names:
        i = i.strip()
    
    正如您所说,您知道如何使用集合,但是集合是无序的数据类型,因此当您将列表转换为集合(使用
    set(list)
    list(set)
    ),然后将集合转换回列表时,顺序将丢失。但是,它可以通过一个方便的python函数
    sorted(list)
    轻松恢复,该函数将按字母顺序为您排序名称

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

    for i in names: #names is your list 
        print(i)
    
    编辑:如果您不熟悉集合,有更容易理解的方法, 例如(这不是很有效):


  • 保留一个空的名称列表以存储您已经看到的名称(
    seed
  • 反复浏览您的姓名列表,并针对每个姓名

  • 如果名称位于
    中,请将其从您的名称列表中删除
  • 如果不是,则将其添加到
    seen
    seen。追加
  • 打印列表
    删除重复项的最佳方法是使用。这是一个没有重复项的元素集合

    例如,您可以这样存储名称:

    names = set([])
    with open(filename, 'r') as f:
        for line in f:
            names.add(line.strip())  # drop the trailing \n
    
    with open(filename, 'r') as f:
        names = set(line.strip() for line in f)
    names = sorted(names)
    
    然后,要对列表进行排序:

    names = sorted(names)
    
    Python语言有(和集)的概念

    因此,您可以像这样简化代码:

    names = set([])
    with open(filename, 'r') as f:
        for line in f:
            names.add(line.strip())  # drop the trailing \n
    
    with open(filename, 'r') as f:
        names = set(line.strip() for line in f)
    names = sorted(names)
    
    如果你的名字不仅仅是英文名字