如何将FOR循环值附加到列表中

时间:2015-02-25 18:30:17

标签: python list if-statement for-loop append

您好我正在尝试将值附加到列表中,虽然这里有各种各样的示例,但这是不同的我使用FOR循环将所有值都记录到列表中,如果找到了正确的名称在“each”中我想将“each”附加到一个新列表中。这是一个例子

for each in lines:
            if names in each:
                print(names)
                print(each)
                if len(newnames)<=3:                   
                    newnames.append((each))

                elif len(newnames)>3:                
                    newnames = newnames[:2]
            print(newnames) 

行看起来像这样

['alex | 7','jake | 10','jake | 2','jake | 5','josh | 3','josh | 5','josh | 7','megan | 6 ','megan | 8','megan | 9']

名称只是一个列表,每个名称只有一个副本。希望这是足够的信息,让你能够找到答案,因为它让我完全难过。

干杯。

3 个答案:

答案 0 :(得分:0)

如果只想要行中的名称,并使用字符串split()方法从行项目中拆分名称。

e.g。

>>> names = set()
>>> l = ['alex|7', 'jake|10', 'jake|2', 'jake|5', 'josh|3', 'josh|5', 'josh|7', 'megan|6', 'megan|8', 'megan|9']
>>> for i in l:
...     names.add(i.split("|")[0])
... 
>>> print names
set(['josh', 'jake', 'alex', 'megan'])
>>> 

Pythonic方式:

>>> l = ['alex|7', 'jake|10', 'jake|2', 'jake|5', 'josh|3', 'josh|5', 'josh|7', 'megan|6', 'megan|8', 'megan|9']
>>> set([i.split("|")[0] for i in l])
set(['josh', 'jake', 'alex', 'megan'])
>>> 

答案 1 :(得分:0)

我不确定我是完全理解你的问题,但是如果我这样做了,那么你想要做的就是解析你的行列表中的字符串,然后检查解析后的名字是否出现在你的名单中。如果是这样,您希望将其附加到新列表中。

如果您希望列表是唯一的,只需将其替换为集合(以及附加添加),或者将result = set(result)添加到程序的末尾。

无论如何,怎么样:

result = []
for each in lines:
    name = each.split('|')[0]
    if name in names:
        result.append(name)
print result

根据您的输入列表,这将给出结果:

['alex', 'jake', 'jake', 'jake', 'josh', 'josh', 'josh', 'megan', 'megan', 'megan']

如果所有这些名称都在您的names列表中。如果没有,它只会附加该列表中的名称。

答案 2 :(得分:0)

我同意Vivek并且我认为:

    if names in each:

应该是

    if each in names:

看起来好像是在将列表与列表元素进行比较。通常你执行相反的比较。您也不需要将值附加为元组,只需附加到列表即可。见这个例子:

    lines=['alex|7', 'jake|10', 'jake|2', 'jake|5', 'josh|3', 'josh|5', 'josh|7', 'megan|6', 'megan|8', 'megan|9']
    names=[l.split('|')[0] for l in ['alex|7', 'jake|10', 'jake|2', 'jake|5', 'josh|3', 'josh|5', 'josh|7', 'megan|6', 'megan|8', 'megan|9']][:-4]
    newnames=[]

    for each in [l.split('|')[0] for l in lines]:
        if each in names:
            print(names)
            print(each)
            if len(newnames)<=3:   
                newnames.append(each)

            elif len(newnames)>3:
                newnames = newnames[:2]
                print(newnames)