有没有一种方法可以使循环取两个范围?

时间:2019-05-21 07:57:17

标签: python for-loop

我想从清单中的10个中取1个值,但我也想取最后一个(l[19])。

我们可以在循环中进行双倍射程吗?

l=[1]*20
for i in range(0,20,10)and range(len(l)-1,len(l)):
    print("i ="+str(i),l[i]) 

还是其他没有双倍射程的方法?

l=[1]*20
for i in range(0,20,10):
    print("i = "+str(i), l[i]) 

预期:"i = 0, 1", "i = 10, 1", "i = 19, 1"

实际结果:"i = 19, 1", 回答python 2: How can I add non-sequential numbers to a range?

我的实际python版本(python 3.7)的最佳答案(以我的拙见): (因为我们不需要导入库或创建列表)

for i in [*range(0, len(l), 10)] + [len(l)-1]:
    print("i = {}, {}".format(str(i), l[i]))

谢谢大家的回答!

5 个答案:

答案 0 :(得分:2)

使用zip

for x, y in zip(range(10), range(10, 0, -1)):
...     print(x, y)
...
0 10
1 9
2 8
3 7
4 6
5 5
6 4
7 3
8 2
9 1

答案 1 :(得分:0)

您可以使用+这样连接列表:

>>> l=[1]*20
>>> range(0, len(l), 10) + [len(l)-1]
[0, 10, 19]

如此:

>>> for i in range(0, len(l), 10) + [len(l)-1]:
    print("i = "+str(i), l[i])

('i = 0', 1)
('i = 10', 1)
('i = 19', 1)

这恰好提供了您所要求的输出,但是我怀疑您实际上 想要我所缺少的东西有些微妙。

答案 2 :(得分:0)

for i in [*range(0, len(l), 10)] + [len(l)-1]:
    print("i = {}, {}".format(str(i), l[i]))

输出:

i = 0, 1
i = 10, 1
i = 19, 1

或:

result = ["i = {}, {}".format(str(i), l[i]) for i in [*range(0, len(l), 10)] + [len(l)-1]] # ['i = 0, 1', 'i = 10, 1', 'i = 19, 1']
for item in result:
    print (item)

输出:

i = 0, 1
i = 10, 1
i = 19, 1

我在这里使用 *(扩展的可迭代拆包)将范围作为列表元素传递给列表

  

*(扩展的可重复拆包)运算符

     

提议更改可迭代的解包语法,从而允许指定   “包罗万象”的名称,将为其分配所有项目的列表,而不是   分配给“常规”名称。

rowsList = [*range(10)] 
print (rowsList)
     

输出:

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
     

示例:

print ([*range(0, 50, 10)])
     

输出:

[0, 10, 20, 30, 40]

答案 3 :(得分:0)

有几种方法,但是鉴于列表的长度和您只想附加一个元素,如果您可以帮助它,那么您可能不想掩盖列表,我将执行以下操作:

连接两个范围

https://stackoverflow.com/a/14099894/4711754

from itertools import chain
concatenated = chain(range(30), range(2000, 5002))
for i in concatenated:

因此,您的用例:

from itertools import chain
l=[1]*20

concatenated = chain(range(0, len(l), 10), [len(l)-1])
for i in concatenated:
    print("i = " + str(i), l[i])

# i = 0 1
# i = 10 1
# i = 19 1

答案 4 :(得分:-1)

如果要选择最简单的方法:

n=19
l=[1]*(n+1)
for i in range(0,20,10):
    print("i = "+str(i)+","+ str(l[i]))
print("i = "+str(n)+","+ str(l[n]))