Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何访问列表中的不同数据类型元素?_Python - Fatal编程技术网

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

Python 如何访问列表中的不同数据类型元素?,python,Python,我有一个带有值的table varchar列,我试图在Python中创建&访问列表元素以进行数据清理。我有如下列表(列示例值): Caller_ID = ['Ambulance',1,2,3,'Fire Crew',1,2] i、 e救护车后接“1、2、3”表示联系救护车3次 消防队后接“12”表示消防队联系了2次。 所以最后,在加载到目标表之前,我需要生成一个包含这个的列表 Caller_ID = ['Ambulance','Ambulance','Ambulance','Fire Crew

我有一个带有值的table varchar列,我试图在Python中创建&访问列表元素以进行数据清理。我有如下列表(列示例值):

Caller_ID = ['Ambulance',1,2,3,'Fire Crew',1,2]
i、 e救护车后接“1、2、3”表示联系救护车3次 消防队后接“12”表示消防队联系了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';`
  }
}
我正在寻找使用Python的动态实现

对于此输入:

Caller_ID = ['Ambulance',1,2,3,'Fire Crew',1,2,'Policia',1]
我需要这个输出:

Caller_ID = ['Ambulance','Ambulance','Ambulance','Fire Crew','Fire Crew','Policia']

在浏览列表时,可以选择字符串和计数:

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)

呼叫者
将包含您正在查找的项目。请注意,这假设名称不重复,或者在这种情况下需要相对位置和计数。

这可以使用
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']

这是我的解决方案,不需要导入,只是一个简单明了的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']

为什么不将数据类型转换为一个字典,该字典的值将是计数器,键将是服务/项目?从哪里获取列表?对于这个问题来说,这是一个相当不切实际的数据结构。只要有
Caller\u ID=['carbum',3,'Fire Crew',2,'Police',1]
就容易多了。你用Python做过什么吗?
'Fire Crew',Fire Crew
应该是什么意思?第一个是字符串,但后者是什么?看起来不像Python语法。JavaScript代码还能工作吗?在我看来,它只是将列表中的每一个元素都设置为“救护车”。应该有一种——最好只有一种——显而易见的方法
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']