2016-02-12 49 views
0

比方说,我有一个元组(4,5,6,7,8)。我想遍历它,然后每个迭代只打印该索引后面的数字。所以像这样:Python按值访问元组索引

for i in tuple: 
    #print values to the right of i 

输出示例:5,6,7,8,6,7,8,7,8,8。有什么帮助吗?我知道如何通过它的索引访问元组值,但不是相反。

回答

6

你的意思是这样的吗?

t = (4, 5, 6, 7, 8) 
for i, _ in enumerate(t, 1): 
    print(t[i:]) 

# (5, 6, 7, 8) 
# (6, 7, 8) 
# (7, 8) 
# (8,) 
#() 

如果你想将它们全部加入到输出元组,下面的1班轮将做到这一点低效:

>>> sum((t[i:] for i, _ in enumerate(t, 1)),()) 
(5, 6, 7, 8, 6, 7, 8, 7, 8, 8) 

更有效的方式是使用itertools.chain.from_iterable

tuple(itertools.chain.from_iterable(
    t[i:] for i, _ in enumerate(t, 1))) 
0

尝试

tuple = (4,5,6,7,8) 
z = [] 
for i in range(len(tuple)): 
    for j in tuple[i+1:]: 
     z.append(j) 

输出是[5,6,7,8,6,7,8,7,8,8]

+0

你的意思'z.extend(J)'?追加将产生一个元组作为项目的列表。 – mgilson

+0

这是追加元组的各个项目,而不是元组本身。 –

0

根据Python文档,tuples are immutable objects。所以如果你想改变你每次遍历元组时产生的输出,你需要每次在你的循环中设置一个新的变量。事情是这样的:

t = (5,6,7,8) 
for i,n in enumerate(t): 
    tnew = t[i:] 
    print tnew 
0

使用列表理解:(?tuple comprehension

t = (4, 5, 6, 7, 8) 
>>> [i for n in range(len(t)) for i in t[n+1:]] 
[5, 6, 7, 8, 6, 7, 8, 7, 8, 8] 

或者,如果你想有一个元组,你可以使用一个生成器表达式:

>>> tuple(i for n in range(len(t)) for i in t[n+1:]) 
(5, 6, 7, 8, 6, 7, 8, 7, 8, 8)