Python 2.7 TypeError:列表索引必须是整数,而不是python代码中的unicode

Python 2.7 TypeError:列表索引必须是整数,而不是python代码中的unicode,python-2.7,apache-spark,pyspark,Python 2.7,Apache Spark,Pyspark,我使用split()函数将字符串转换为列表time=time.split(),我的输出如下所示: [u'1472120400.107'] [u'1472120399.999'] [u'1472120399.334'] [u'1472120397.633'] [u'1472120397.261'] [u'1472120394.328'] [u'1472120393.762'] [u'1472120393.737'] 然后,我尝试使用打印时间[1]访问列表的内容,这会导致索引超出范围错误(因为一个

我使用split()函数将字符串转换为列表
time=time.split()
,我的输出如下所示:

[u'1472120400.107']
[u'1472120399.999']
[u'1472120399.334']
[u'1472120397.633']
[u'1472120397.261']
[u'1472120394.328']
[u'1472120393.762']
[u'1472120393.737']
然后,我尝试使用
打印时间[1]
访问列表的内容,这会导致索引超出范围错误(因为一个列表中只存储一个值)。我检查了其他人发布的问题,并使用了
print len(time)
。这是以下各项的输出:

1
[u'1472120400.107']
1
[u'1472120399.999']
1
[u'1472120399.334']
1
[u'1472120397.633']
1
[u'1472120397.261']
1
[u'1472120394.328']
1
[u'1472120393.762']
1
[u'1472120393.737']
我在for循环中完成这整件事,因为我动态地获取日志,并且只需要提取时间。 这是我代码的一部分:

line_collect = lines.collect() #spark function
for line in line_collect :
    a = re.search(rx1,line)
    time = a.group()
    time = time.split()
    #print time[1] #index out of range error which is why I wrote another for below
    for k in time :
        time1 = time[k]#trying to put those individual list values into one variable but get type error
        print len(time1)
我得到以下错误:

time1=时间[k]
TypeError:列表索引必须是整数,而不是unicode

有人能告诉我如何将这些单个列表值读入一个列表中,这样我就可以使用单个索引[值]来访问它们中的每一个吗。我是python新手

我所需的输出:

时间=['1472120400.107','1472120399.999','1472120399.334','1472120397.633','1472120397.261','1472120394.328','1472120393.762','1472120393.737']


因此,我可以使用时间[1]给出1472120399.999作为结果。

使用
for
循环遍历列表将一次给出一个值,而不是索引本身。考虑使用枚举:

for k, value in enumerate(time):
    time1 = value # Or time1 = time[k]
    print(time1)
或者只是获取值本身:

for k in time:
    time1 = k
    print(time1)
--


另外,Python是基于零的语言,因此要从列表中获取第一个元素,您可能需要使用
time[0]

更新:我误解了您的要求。您已经有了正确的输出,它是一个字符串。字符串前面有一个
u
,原因是它是一个16位的unicode字符串
u
是一个python标志,用于将其与普通字符串区分开来。将其打印到屏幕上会得到正确的字符串。像使用任何其他字符串一样正常使用它

time = [u'1472120400.107']  # One element just to show

for k in time:
    print(k)

谢谢你的帮助。我终于把代码弄对了:

newlst = []
for line in line_collect :
    a = re.search(rx1,line)
    time = a.group()
    newlst.append(float(time))
print newlst
这将把整个列表值放入一个列表中。 输出:

[1472120400.107、1472120399.999、1472120399.334、1472120397.633、, 1472120397.261、1472120394.328、1472120393.762、1472120393.737]


您需要的输出是什么?我已将输出添加到问题中。当我打印我的
newlst
时,它仍然是空的。然后我尝试了主for循环:
newlst=[]newlst.append(time)print newlst[]
,但值仍然在不同的列表中。我的原始代码没有将所有值放入一个列表中。每次提取单个值时,它都会为此创建一个新列表。这就是为什么我得到列表[1]的索引越界错误,但得到列表[0]的结果。如果我没有错的话,它会创建8个不同的列表。我得到的输出与我的旧列表相同。我已经在我的问题中添加了所需的输出。我认为您的原始代码应该可以工作,因为您有一个内部循环。您可以将其转换为内部循环中的浮动。原始问题将所需的输出显示为字符串。