我有表varchar列的值,我正在尝试创建& Python中的访问列表元素,用于数据清理。我有这样的列表(列样本值):
Caller_ID = ['Ambulance',1,2,3,'Fire Crew',1,2]
救护车随后是“1,2,3”,意味着救护车被联系了3次
消防队员后跟“1 2”意味着消防队员被联系了2次。
所以最后我需要在加载到目标表之前生成一个包含它的列表
Caller_ID = ['Ambulance','Ambulance','Ambulance','Fire Crew','Fire Crew']
我需要制作报告,说3个叫救护车部,2个叫消防队部门等。
我使用JavaScript进行静态实现。
var n = Caller_ID;
var len = n.length;
for (i = 0; i < len; i++) {
if (n.indexOf('Ambulance') > -1) {
var nn = n[i + 1] = 'Ambulance';
} else if (n.indexOf('Fire Crew') > -1) {
nn = n[i + 1] = 'Fire Crew';`
}
}
输出:
Caller_ID = ['Ambulance','Ambulance','Ambulance','Ambulance','Fire Crew','Fire Crew','Fire Crew','Police','Police']
我正在寻找使用Python的动态实现。
对于此输入:
Caller_ID = ['Ambulance',1,2,3,'Fire Crew',1,2,'Policia',1]
我需要这个输出:
Caller_ID = ['Ambulance','Ambulance','Ambulance','Fire Crew','Fire Crew','Policia']
答案 0 :(得分:2)
这可以使用itertools.groupby
轻松完成,将整数分组在一起,并将它们与字符串分开。 “技巧”是使用type
作为groupby
键功能。
from itertools import groupby
Caller_ID = ['Ambulance', 1, 2, 3, 'Fire Crew', 1, 2, 'Police', 1]
newlist = []
for k, g in groupby(Caller_ID, key=type):
g = list(g)
if k is str:
s = g
else:
newlist.extend(s * len(g))
print(newlist)
<强>输出强>
['Ambulance', 'Ambulance', 'Ambulance', 'Fire Crew', 'Fire Crew', 'Police']
答案 1 :(得分:2)
这是我的解决方案,不需要导入,只需一个简单易读的for循环。
Caller_ID = ['Ambulance',1,2,3,'Fire Crew',1,2]
new_list = []
for item in Caller_ID:
if type(item) == str:
current = item
else:
new_list.append(current)
>>> new_list
['Ambulance', 'Ambulance', 'Ambulance', 'Fire Crew', 'Fire Crew']
答案 2 :(得分:0)
您可以在列表中选择字符串和计数:
Caller_ID = ['Ambulance',1,2,3,'Fire Crew',1,2,'Police',1]
Callers = [] # list to hold result
current_caller, caller_count = "", 0 # temporary variables holding current element
# iterate through the list, pick each name and count
for elem in Caller_ID:
# new name found
if isinstance(elem, str): # in python2.X, use basestring
Callers.extend([elem] * caller_count) # store last name with appropriate count
current_caller, caller_count = elem, 0 # reset state
else:
caller_count += 1
Callers.extend([current_caller] * caller_count)
Callers
将包含您要查找的项目。请注意,这假定名称不重复,或者在这种情况下需要相对位置和计数。