我想忽略用户提供的任何重复条目作为输入。我有以下代码:
def pITEMName():
global ITEMList,fITEMList
pITEMList = []
fITEMList = []
ITEMList = str(raw_input('Enter pipe separated list of ITEMS : ')).upper().strip()
items = ITEMList.split("|")
count = len(items)
print 'Total Distint ITEM Count : ', count
pipelst = [i.replace('-mc','').replace('-MC','').replace('$','').replace('^','') for i in ITEMList.split('|')]
filepath = '/location/data.txt'
f = open(filepath, 'r')
for lns in f:
split_pipe = lns.split(':', 1)
if split_pipe[0] in pipelst:
index = pipelst.index(split_pipe[0])
pITEMList=split_pipe[0]+"|"
fITEMList.append(pITEMList)
del pipelst[index]
for lns in pipelst:
print bcolors.red + lns,' is wrong ITEM Name' + bcolors.ENDC
f.close()
当我执行上面的代码时,它会提示我输入用户:
输入管道分隔的项目列表:
如果我将输入提供为:
输入管道分隔的项目列表:AAA | IFA | AAA
按Enter键后,我得到结果:
输入管道分隔的项目列表:AAA | IFA | AAA
Total Distint项目数:3
AAA错误的项目名称
属于其他中心的项目:
其他中心:
项目计数来自其他中心= 0
属于当前中心的项目:
US1中的有效项目:
^ IFA $
US2中的有效项目:
^ AAA $ | ^ AAA $
从当前中心忽略的项目数= 0
您已将属于此中心的ItemList输入为: ^ IFA $ | ^ AAA $ | ^ AAA $
有效项目数:3
您想继续[YES | Y | NO | N]:
在上面的结果中,您必须注意到我已经两次提到AAA条目,因此将其计为错误的项目。我希望忽略重复条目。在这里,我也想忽略区分大小写的情况。意思是如果我给AAA | aaa | ifa,一个'aaa'应该被忽略。
请帮助我实现这一目标。
答案 0 :(得分:2)
首先,您多次执行ITEMList.split("|")
次。您应该使用已经计算的items
。
其次,你可能想要:
items = set(ITEMList.lower().split("|"))
通过这种方式,您可以获得具有唯一全部小写元素的集合。 我认为这并不重要,因为你可以丢弃大写或小写。
答案 1 :(得分:1)
如果项目顺序不重要,那么set
将很好地完成此任务。
items = set(ITEMList.split("|"))
答案 2 :(得分:0)
如果订单很重要
my_list = "^IFA$|^AAA$|^AAA$"
"|".join(collections.Counter(my_list.upper().split("|")).keys())
是一种方法
答案 3 :(得分:0)
这里有很多很棒的答案;把我的帽子扔进戒指。一种直截了当的方法:
items = list(set(ITEMList.split("|")))
items.sort()
这会将您的items
对象保留为列表并对其进行排序(在这种情况下,这可能是您可能不喜欢或不喜欢的)。
如果您稍后决定要在代码中返回items
列表中的元素,则可以通过引用列表索引来执行此操作(此功能不会与集合一起存在) )。
如果要保留变量count
的值,可以将代码实现为:
items = ITEMList.split("|")
count = len(items)
items = list(set(ITEMList.split("|")))
items.sort()
您还需要调整此行:
pipelst = [i.replace('-mc','').replace('MC','').replace('$','').replace('^','') for i in ITEMList.split('|')]
到此:
pipelst = [i.replace('-mc','').replace('MC','').replace('$','').replace('^','') for i in items]