我想从清单中的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]))
谢谢大家的回答!
答案 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]))