您好我正在尝试将值附加到列表中,虽然这里有各种各样的示例,但这是不同的我使用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']
名称只是一个列表,每个名称只有一个副本。希望这是足够的信息,让你能够找到答案,因为它让我完全难过。
干杯。
答案 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)