从列表中删除重复项并使用python对其排序
我目前正在学习python和encourter问题,同时做老师提供的练习。因此,我有一个txt文件,其中包含如下所示的名称列表从列表中删除重复项并使用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的方法。 然而,我的老师
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)
如果你的名字不仅仅是英文名字