2016-08-12 52 views
0

我试图从系统命令中收集列出由新行分隔的票证(字符串)的输出。我指定'lastTicket'是什么,我想复制完整列表直到我到达lastTicket。我收到以下错误,“TypeError:列表索引必须是整数,而不是str”,在下面的第5行。我怎样才能复制我需要的列表部分?谢谢。在Python中复制部分列表

output = subprocess.check_output(cmd, shell=True) 

allTickets = output.rstrip().split('\n') 

idx = len(allTickets) 
for ii in allTickets: 
    if lastTicket in allTickets[ii]: 
     idx = ii 
     break 

print idx 

tickets = allTickets[idx:len(allTickets)] 
+1

我认为错误实际上线7(带有''allTickets它[II])。这对你有帮助吗?尝试在该行之前打印“ii”。 – smarx

+0

什么需要调用你的临时变量'ii'而不是'我'? –

回答

1

兼用

for ii in range(len(allTickets)): 
    if lastTicket in allTickets[ii]: 
     idx = ii 
     break 

顺便说一句,你确定要if lastTicket in allTickets[ii]:而不是if lastTicket == allTickets[ii]:

+1

后者没有意义。 (什么是'ii'?) – smarx

+0

你是对的,我做得太快了。删除。 – Julien

+0

这就是我一直在寻找的!谢谢。我如何在此列表中编制索引?说如果我想打印'票'的第三个元素? – iheartcpp

-1

li处于allTickets(我想是字符串)值。你通过这个来获得价值allTickets[ii]。数组/列表索引总是整数。

我认为你正在寻找的东西,如:

for index, val in ......... 
     if lastTicket in allTickets[index]: 
+0

如果你不打算使用'val',那么对于范围内的索引(len(allTickets))''可能更好。 – smarx

+0

@smarx:同意,我不确定OP需要什么,所以给出了答案。 – kosa

0

使用enumerate获得一个指标:

for idx, ticket in enumerate(allTickets): 
    if lastTicket in ticket: 
     break 
print idx 
tickets = allTickets[idx:]