我有一个列表,其中包含来自.csv文件的多个重复字符串:
listOne = ['strOne', 'strTwo', 'strThree', 'strOne', 'strTwo', 'strOne']
并希望从中创建一个新列表以仅保留唯一字符串:
listTwo = ['strOne', 'strTwo', 'strThree']
我读取文件并填充原始列表,如下所示:
def createOrigList(filename):
dataFile = open(filename,'r')
for line in dataFile:
origList.append(line)
def createListOne():
for item in origList:
tempList = item.split(',')
strOne = tempList[0].strip()
listOne.append(strOne)
我尝试实施this earlier post并使用嵌套在if (... not in ...)
循环中的Python for
条件来填充listTwo
,但是当我尝试打印{{1}时没有添加任何东西。
listTwo
在尝试创建def createListTwo():
for item in listOne:
item = item.strip()
if (item not in listTwo):
listTwo.append(item)
时,我不是在比较确切的字符串吗?
答案 0 :(得分:2)
您可以将其投放到set
。像这样:
listTwo = set(listOne)
print(listTwo)
这只会保留listOne
中的唯一元素。
答案 1 :(得分:2)
因为已经回答你可以使用python set。
但是,没有人询问您是否需要保留原始列表的顺序,因为set不保留原始列表的顺序。如果您需要保留原始列表的顺序,可以使用OrderedDict
:
from collections import OrderedDict
listOne = ['strOne', 'strTwo', 'strThree', 'strOne', 'strTwo', 'strOne']
listTwo = list(OrderedDict.fromkeys(listOne))
print(listTwo)
答案 2 :(得分:1)
你走了:
listTwo = [item.strip() for item in set(listOne)]
答案 3 :(得分:1)
最简单的事情是使用SET,它将删除所有重复的字符串。您还可以将其转换为列表
答案 4 :(得分:1)
使用set
删除列表中的重复项。
listOne = list(set(listOne))
如果列表中的值包含空格,那么您可以删除列表中的每个项目并将其设为set
listOne = list(set([x.strip() for x in listOne]))
请记住,上述答案都不会保留元素的顺序。