我正在尝试获取一个列表,检查它是否包含'&'然后根据角色的位置加入该角色之前和之后的数据。 '&'位置并不总是一样的。
假设我有一个清单
_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"
答案 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