python 当外循环索引等于内循环长度时嵌套for循环你重新开始
python nested for loop when index of outer loop equals to length of inner loop you start again
我有
A = ['A','B','C','D','E','F','G','H']
B= ['a','b']
想遍历列表得到
C = ['Aa','Bb','Ca','Db','Ea','Fb','Ga','Hb']
我怎样才能在 python
您可以使用列表理解:
a = ['A','B','C','D','E','F','G','H']
b = ['a','b']
c = [a[i] + b[i%2] for i in range(len(a))]
# ['Aa', 'Bb', 'Ca', 'Db', 'Ea', 'Fb', 'Ga', 'Hb']
您可以使用 A 列表中的索引映射到 B 列表中的元素数并进行取模运算 (%
) 来完成此操作:
A = [1,2,3,4,5,6,7,8]
B= ['a','b']
C = []
for i in range(len(A)):
C.append(f"{A[i]}{B[i%2]}")
您可以使用 zip()
和 cycle()
:
from itertools import cycle
A = ['A','B','C','D','E','F','G','H']
B = ['a', 'b']
C = [a + b for a,b in zip(A, cycle(B))]
print(C)
按要求输出。
A = [1, 2, 3, 4, 5, 6, 7, 8]
B = ["a", "b", "c", "d", "f", "g", "h", "q"]
C = []
i = 0
while i < len(A):
for j in B:
C.append("{}{}".format(A[i], j))
i = i + 1
print(C)
你可以在没有任何模块的情况下尝试这个。
您可以指定数组,无论如何都可以。我就是这样测试的
更多变化和基准:
Best 3 of 20 rounds:
885 ns 888 ns 888 ns [*map(concat, A, cycle(B))]
955 ns 959 ns 961 ns list(map(concat, A, cycle(B)))
969 ns 976 ns 976 ns list(map(add, A, cycle(B)))
1168 ns 1173 ns 1174 ns list(starmap(concat, zip(A, cycle(B))))
1230 ns 1235 ns 1239 ns list(map(''.join, zip(A, cycle(B))))
1232 ns 1236 ns 1249 ns [a + b for a, b in zip(A, cycle(B))]
1335 ns 1344 ns 1346 ns [f'{a}{b}' for a, b in zip(A, cycle(B))]
1359 ns 1362 ns 1366 ns [a + B[i%2] for i, a in enumerate(A)]
1418 ns 1421 ns 1423 ns m = len(B); [a + B[i%m] for i, a in enumerate(A)]
1492 ns 1509 ns 1510 ns [A[i] + B[i%2] for i in range(len(A))]
1964 ns 1978 ns 1978 ns list(map('{}{}'.format, A, cycle(B)))
A
乘以 1000(即列表长 1000 倍):
Best 3 of 20 rounds:
654 us 655 us 658 us [*map(concat, A, cycle(B))]
657 us 657 us 657 us list(map(concat, A, cycle(B)))
674 us 676 us 676 us list(map(add, A, cycle(B)))
727 us 737 us 738 us list(starmap(concat, zip(A, cycle(B))))
743 us 746 us 747 us list(map(''.join, zip(A, cycle(B))))
837 us 841 us 841 us [a + b for a, b in zip(A, cycle(B))]
943 us 945 us 946 us [f'{a}{b}' for a, b in zip(A, cycle(B))]
1279 us 1288 us 1290 us m = len(B); [a + B[i%m] for i, a in enumerate(A)]
1280 us 1280 us 1281 us [a + B[i%2] for i, a in enumerate(A)]
1317 us 1319 us 1323 us [A[i] + B[i%2] for i in range(len(A))]
1626 us 1633 us 1638 us list(map('{}{}'.format, A, cycle(B)))
代码(Try it online!):
from timeit import repeat
from random import shuffle
from bisect import insort
setup = '''
from itertools import cycle, starmap
from operator import concat, add
A = ['A','B','C','D','E','F','G','H']
B = ['a','b']
'''
solutions = [
'list(map(add, A, cycle(B)))',
'list(map(concat, A, cycle(B)))',
'[*map(concat, A, cycle(B))]',
'[a + B[i%2] for i, a in enumerate(A)]',
'm = len(B); [a + B[i%m] for i, a in enumerate(A)]',
"list(map(''.join, zip(A, cycle(B))))",
"list(map('{}{}'.format, A, cycle(B)))",
'[a + b for a, b in zip(A, cycle(B))]',
"[f'{a}{b}' for a, b in zip(A, cycle(B))]",
'list(starmap(concat, zip(A, cycle(B))))',
'[A[i] + B[i%2] for i in range(len(A))]',
]
exec(setup)
for sol in solutions:
try:
print(eval(sol) == ['Aa','Bb','Ca','Db','Ea','Fb','Ga','Hb'])
except SyntaxError:
pass
tss = {sol: [] for sol in solutions}
for i in range(20):
print(f'Best 3 of {i+1} rounds:')
shuffle(solutions)
for sol in solutions:
number = 10 ** 4
t = min(repeat(sol, setup, number=number)) / number
insort(tss[sol], t)
for sol in sorted(tss, key=tss.get):
print(*('%4d ns ' % (t * 1e9) for t in tss[sol][:3]), sol)
print()
你也可以试试这个:
A = ['A','B','C','D','E','F','G','H']
B= ['a','b']
LB = len(B)
x = 0
for i in A :
if x>=LB :
x=0
print(i+B[x])
x+=1
我有
A = ['A','B','C','D','E','F','G','H']
B= ['a','b']
想遍历列表得到
C = ['Aa','Bb','Ca','Db','Ea','Fb','Ga','Hb']
我怎样才能在 python
您可以使用列表理解:
a = ['A','B','C','D','E','F','G','H']
b = ['a','b']
c = [a[i] + b[i%2] for i in range(len(a))]
# ['Aa', 'Bb', 'Ca', 'Db', 'Ea', 'Fb', 'Ga', 'Hb']
您可以使用 A 列表中的索引映射到 B 列表中的元素数并进行取模运算 (%
) 来完成此操作:
A = [1,2,3,4,5,6,7,8]
B= ['a','b']
C = []
for i in range(len(A)):
C.append(f"{A[i]}{B[i%2]}")
您可以使用 zip()
和 cycle()
:
from itertools import cycle
A = ['A','B','C','D','E','F','G','H']
B = ['a', 'b']
C = [a + b for a,b in zip(A, cycle(B))]
print(C)
按要求输出。
A = [1, 2, 3, 4, 5, 6, 7, 8]
B = ["a", "b", "c", "d", "f", "g", "h", "q"]
C = []
i = 0
while i < len(A):
for j in B:
C.append("{}{}".format(A[i], j))
i = i + 1
print(C)
你可以在没有任何模块的情况下尝试这个。
您可以指定数组,无论如何都可以。我就是这样测试的
更多变化和基准:
Best 3 of 20 rounds:
885 ns 888 ns 888 ns [*map(concat, A, cycle(B))]
955 ns 959 ns 961 ns list(map(concat, A, cycle(B)))
969 ns 976 ns 976 ns list(map(add, A, cycle(B)))
1168 ns 1173 ns 1174 ns list(starmap(concat, zip(A, cycle(B))))
1230 ns 1235 ns 1239 ns list(map(''.join, zip(A, cycle(B))))
1232 ns 1236 ns 1249 ns [a + b for a, b in zip(A, cycle(B))]
1335 ns 1344 ns 1346 ns [f'{a}{b}' for a, b in zip(A, cycle(B))]
1359 ns 1362 ns 1366 ns [a + B[i%2] for i, a in enumerate(A)]
1418 ns 1421 ns 1423 ns m = len(B); [a + B[i%m] for i, a in enumerate(A)]
1492 ns 1509 ns 1510 ns [A[i] + B[i%2] for i in range(len(A))]
1964 ns 1978 ns 1978 ns list(map('{}{}'.format, A, cycle(B)))
A
乘以 1000(即列表长 1000 倍):
Best 3 of 20 rounds:
654 us 655 us 658 us [*map(concat, A, cycle(B))]
657 us 657 us 657 us list(map(concat, A, cycle(B)))
674 us 676 us 676 us list(map(add, A, cycle(B)))
727 us 737 us 738 us list(starmap(concat, zip(A, cycle(B))))
743 us 746 us 747 us list(map(''.join, zip(A, cycle(B))))
837 us 841 us 841 us [a + b for a, b in zip(A, cycle(B))]
943 us 945 us 946 us [f'{a}{b}' for a, b in zip(A, cycle(B))]
1279 us 1288 us 1290 us m = len(B); [a + B[i%m] for i, a in enumerate(A)]
1280 us 1280 us 1281 us [a + B[i%2] for i, a in enumerate(A)]
1317 us 1319 us 1323 us [A[i] + B[i%2] for i in range(len(A))]
1626 us 1633 us 1638 us list(map('{}{}'.format, A, cycle(B)))
代码(Try it online!):
from timeit import repeat
from random import shuffle
from bisect import insort
setup = '''
from itertools import cycle, starmap
from operator import concat, add
A = ['A','B','C','D','E','F','G','H']
B = ['a','b']
'''
solutions = [
'list(map(add, A, cycle(B)))',
'list(map(concat, A, cycle(B)))',
'[*map(concat, A, cycle(B))]',
'[a + B[i%2] for i, a in enumerate(A)]',
'm = len(B); [a + B[i%m] for i, a in enumerate(A)]',
"list(map(''.join, zip(A, cycle(B))))",
"list(map('{}{}'.format, A, cycle(B)))",
'[a + b for a, b in zip(A, cycle(B))]',
"[f'{a}{b}' for a, b in zip(A, cycle(B))]",
'list(starmap(concat, zip(A, cycle(B))))',
'[A[i] + B[i%2] for i in range(len(A))]',
]
exec(setup)
for sol in solutions:
try:
print(eval(sol) == ['Aa','Bb','Ca','Db','Ea','Fb','Ga','Hb'])
except SyntaxError:
pass
tss = {sol: [] for sol in solutions}
for i in range(20):
print(f'Best 3 of {i+1} rounds:')
shuffle(solutions)
for sol in solutions:
number = 10 ** 4
t = min(repeat(sol, setup, number=number)) / number
insort(tss[sol], t)
for sol in sorted(tss, key=tss.get):
print(*('%4d ns ' % (t * 1e9) for t in tss[sol][:3]), sol)
print()
你也可以试试这个:
A = ['A','B','C','D','E','F','G','H']
B= ['a','b']
LB = len(B)
x = 0
for i in A :
if x>=LB :
x=0
print(i+B[x])
x+=1