从用户输入

时间:2015-07-14 19:17:48

标签: python

我想忽略用户提供的任何重复条目作为输入。我有以下代码:

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'应该被忽略。

请帮助我实现这一目标。

4 个答案:

答案 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]