如何访问列表中的不同数据类型元素?

时间:2016-07-07 12:08:13

标签: python

我有表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']

3 个答案:

答案 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将包含您要查找的项目。请注意,这假定名称不重复,或者在这种情况下需要相对位置和计数。