python - 基于循环条件的 Zip 运算符参数
问题描述
我想增加zip
基于 for 循环的字符串中的项目数。
例如,这是代码
s = "abcde"
for i in range(1, len(s)):
#if i = 1, then this should be the code statement
l = zip(s, s[1:]) #list(l) = [('a', 'b'), ('b', 'c'), ('c', 'd'), ('d', 'e')]
#if i = 2, then
l = zip(s, s[1:], s[2:]) #list(l) = [('a', 'b', 'c'), ('b', 'c', 'd'), ('c', 'd', 'e')]
#if i = 3, then
l = zip(s, s[1:], s[2:], s[3:]) #list(l) = [('a', 'b', 'c', 'd'), ('b', 'c', 'd', 'e')]
请注意,对于任何给定的 i,运算符中有 i + 1 个可迭代项zip
。
解决方案
>>> s = '123456'
>>>
>>> for n in range(1, len(s)):
print(list(zip(*[s[i:] for i in range(0,n+1)])))
[('1', '2'), ('2', '3'), ('3', '4'), ('4', '5'), ('5', '6')]
[('1', '2', '3'), ('2', '3', '4'), ('3', '4', '5'), ('4', '5', '6')]
[('1', '2', '3', '4'), ('2', '3', '4', '5'), ('3', '4', '5', '6')]
[('1', '2', '3', '4', '5'), ('2', '3', '4', '5', '6')]
[('1', '2', '3', '4', '5', '6')]
[s[i:] for i in range(0,n+1)]
是一个列表推导式,它创建s
.
因为n=2
它创建了列表[s[0:], s[1:], s[2:]]
。
它可以写成一个常规的 for 循环:
l = []
for i in range(0,n+1):
#print(i, 's[{}:]'.format(i))
l.append(s[i:])
使用解决方案中使用的常规for 循环将是:
for n in range(1, len(s)):
#print('n:{}'.format(n), '**********')
l = []
for i in range(0, n+1):
l.append(s[i:])
#print(l)
print(list(zip(*l)))
这是一个改编自itertools 配方的函数,它做类似的事情。
import itertools
def nwise(iterable, n=2):
"s -> (s0,s1), (s1,s2), (s2, s3), ... for n=2"
iterables = itertools.tee(iterable, n)
# advance each iterable to the appropriate starting point
for i, thing in enumerate(iterables[1:],1):
for _ in range(i):
next(thing, None)
return zip(*iterables)
供您使用:
for n in range(1, len(s)):
print(list(nwise(s, n+1)))
推荐阅读
- java - 如何在没有 try-catch 块的情况下忽略 DuplicateKeyException 并设置 BindingResult
- arrays - 如何检查字符串数组中的重复元素
- python - 如何使用 if/and?
- python - 不支持查询关键条件,python
- firebase - 错误:类型“Null”不是类型转换中“_StateDataWidget”类型的子类型
- javascript - 如何根据特定字母对对象数组进行排序?
- karate - 我可以从一个场景中获取值并将其传递给性能场景并使用 Karate-Gatling 并行执行所有数据集吗
- javascript - 使用 html 和 js 搜索表单
- mapbox-unity - SpawnPrefabAtGeoLocation 与 mapbox-streets-v8?
- azure-virtual-network - 在 Azure 中与网关传输进行 VPN 对等互连是否需要 BGP