在&之前和之后加入部分列表字符

时间:2018-03-26 23:07:14

标签: python list join

我正在尝试获取一个列表,检查它是否包含'&'然后根据角色的位置加入该角色之前和之后的数据。 '&'位置并不总是一样的。

假设我有一个清单

_list = ['John', 'Adams', '&', 'George', 'Washington']

我想获取&符号前后的值,并将它们作为字符串存储到变量中。

name_one = "John Adams"
name_two = "George Washington"

请记住,这必须是动态的,因为无论有多少指数,我都需要能够获得所有数据

_list = ['John', 'Adams', 'Jr.', '&', 'George', 'Washington']

会返回

name_one = "John Adams Jr."
name_two = "George Washington"

5 个答案:

答案 0 :(得分:2)

您可以使用dataset:$scope.dataObject查找$scope.types=[ {id:'Maintenance',title:'Maintenance'}, {id:'Modification',title:'Modification'}, ];第一次出现的索引,然后在该索引之前和之后进行切片。

list.index

答案 1 :(得分:2)

既然你要将部分列表组合成字符串,那么为什么不首先加入所有部分然后拆分呢?

_list = ['John', 'Adams', 'Jr.', '&', 'George', 'Washington']
name_one, name_two = " ".join(_list).split(" & ")
print(name_one, name_two, sep=", ")
#John Adams Jr., George Washington

您甚至可以使用相同的表达式处理两个以上的部分:

_list = ['John', 'Adams', '&', 'George', 'Washington', '&', 'Ben', 'Franklin']
name_one, name_two, *more_names = " ".join(_list).split(" & ")
print(name_one, name_two, more_names, sep=", ")
#John Adams, George Washington, ['Ben Franklin']

答案 2 :(得分:1)

您可以使用itertools.groupby

import itertools
l = [['John', 'Adams', '&', 'George', 'Washington'], ['John', 'Adams', 'Jr.', '&', 'George', 'Washington']]
for i in l:
  a, _, b  = [' '.join(b) for a, b in itertools.groupby(i, key=lambda x:x=='&')]
  print(a, b)

输出:

('John Adams', 'George Washington')
('John Adams Jr.', 'George Washington')

答案 3 :(得分:1)

这是一个简单的解决方案:

l = ['John', 'Adams', '&', 'George', 'Washington']
ind = l.index('&')
name_one = ' '.join(l[:ind])
name_two = ' '.join(l[ind+1:])

毋庸置疑,您应该注意不包含'&'的列表字符或包含它的多个实例。

答案 4 :(得分:0)

你可以尝试这种方法:

data22=['John', 'Adams', '&', 'George', 'Washington','john','&','paul','&','and','hi']

track=[0]+[j+1 for j,i in enumerate(data22) if i=='&']


for i in range(0,len(track)):

    if len(track[i:i+2])==2:
        real_data=data22[track[i:i+2][0]:track[i:i+2][1]]
        print(" ".join(real_data[:-1]))
    else:

        print(" ".join(data22[track[i:i+2][0]:]))

输出:

John Adams
George Washington john
paul
and hi