如何根据给定的位置显示值列表?
How to display a list of values according to the positions given?
假设我有一串随机生成的值,
string = 'ZlgKgIvhPGClfDtmaXjtqQMohOiNZuGaKwSyKsHAcAmpfDXOTUZIfwOvmlotZrquFDFvIvOZ'
还有一些位置作为元组列表,
pxn = [(2, 10), (13, 20)]
其中元组表示字符串的开始和结束位置。
我一直在尝试编写一个函数,根据给定的位置 return 分割字符串,所以它看起来像那样
segment = ['lgKgIvhPG','fDtmaXjt']
我已经尝试过这样做了,
def find_region(string):
" function that returns the string in segments by starting and ending positions provided"
for code, start, end in list:
if index.string == start:
if index.string == end:
return code
这显然行不通,但我真的不知道如何继续。
编辑:
假设 string 和 pxn 是存在于字典中的键,看起来像这样
{'string':'ZlgKgIvhPGClfDtmaXjtqQMohOiNZuGaKwSyKsHAcAmpfDXOTUZIfwOvmlotZrquFDFvIvOZ', 'pxn': [(2, 10), (13,20)]}
然后将如何解决这个问题?任何帮助将非常感激。谢谢。
您可以使用带有列表理解的字符串切片来生成所需的输出:
[string[start - 1:end] for start, end in pxn]
这输出:
['lgKgIvhPG', 'fDtmaXjt']
你可以用这个。
string = 'ZlgKgIvhPGClfDtmaXjtqQMohOiNZuGaKwSyKsHAcAmpfDXOTUZIfwOvmlotZrquFDFvIvOZ'
pxn = [(2, 10), (13, 20)]
segments = [string[start:end] for start,end in pxn]
print(segments)
输出
['gKgIvhPG', 'DtmaXjt']
由于python中的编号从0开始,这意味着0指向列表的第一个索引。
但是如果你想让 1 指向列表的第一个索引,那么你可以使用这个。
string = 'ZlgKgIvhPGClfDtmaXjtqQMohOiNZuGaKwSyKsHAcAmpfDXOTUZIfwOvmlotZrquFDFvIvOZ'
pxn = [(2, 10), (13, 20)]
segments = [string[start-1:end] for start,end in pxn]
print(segments)
但是,如果用户提供的值小于零 (0) 或大于字符串的长度,则需要小心。那么这个代码不能完美运行那么你需要使用这个。
string = 'ZlgKgIvhPGClfDtmaXjtqQMohOiNZuGaKwSyKsHAcAmpfDXOTUZIfwOvmlotZrquFDFvIvOZ'
pxn = [(2, 10), (13, 20)]
segments = [string[start:end] for start,end in pxn if start>=0 and end<len(string)]
print(segments)
通过链接功能。希望对理解需要的语句流有用:
- 将间隔转换为切片对象
- 将切片应用于字符串(字符串支持 list-like 访问值)
需要 itertools.starmap
才能正确“提供”slice
函数的参数。
import itertools as it
string = 'ZlgKgIvhPGClfDtmaXjtqQMohOiNZuGaKwSyKsHAcAmpfDXOTUZIfwOvmlotZrquFDFvIvOZ'
pxn = [(2, 10), (13, 20)]
slices = map(string.__getitem__, it.starmap(slice, pxn))
print(list(slices))
# ['gKgIvhPG', 'DtmaXjt']
备注:由于字符串的长度被定义为len = end - start
,因此与子字符串的starting/ending点的概念不匹配。在这种情况下,pxn
可以被预处理:
...
x, y = zip(*pxn)
x = map(int(1).__rsub__, x)
slices = map(string.__getitem__, it.starmap(slice, zip(x, y)))
假设我有一串随机生成的值,
string = 'ZlgKgIvhPGClfDtmaXjtqQMohOiNZuGaKwSyKsHAcAmpfDXOTUZIfwOvmlotZrquFDFvIvOZ'
还有一些位置作为元组列表,
pxn = [(2, 10), (13, 20)]
其中元组表示字符串的开始和结束位置。
我一直在尝试编写一个函数,根据给定的位置 return 分割字符串,所以它看起来像那样
segment = ['lgKgIvhPG','fDtmaXjt']
我已经尝试过这样做了,
def find_region(string):
" function that returns the string in segments by starting and ending positions provided"
for code, start, end in list:
if index.string == start:
if index.string == end:
return code
这显然行不通,但我真的不知道如何继续。
编辑: 假设 string 和 pxn 是存在于字典中的键,看起来像这样
{'string':'ZlgKgIvhPGClfDtmaXjtqQMohOiNZuGaKwSyKsHAcAmpfDXOTUZIfwOvmlotZrquFDFvIvOZ', 'pxn': [(2, 10), (13,20)]}
然后将如何解决这个问题?任何帮助将非常感激。谢谢。
您可以使用带有列表理解的字符串切片来生成所需的输出:
[string[start - 1:end] for start, end in pxn]
这输出:
['lgKgIvhPG', 'fDtmaXjt']
你可以用这个。
string = 'ZlgKgIvhPGClfDtmaXjtqQMohOiNZuGaKwSyKsHAcAmpfDXOTUZIfwOvmlotZrquFDFvIvOZ'
pxn = [(2, 10), (13, 20)]
segments = [string[start:end] for start,end in pxn]
print(segments)
输出
['gKgIvhPG', 'DtmaXjt']
由于python中的编号从0开始,这意味着0指向列表的第一个索引。 但是如果你想让 1 指向列表的第一个索引,那么你可以使用这个。
string = 'ZlgKgIvhPGClfDtmaXjtqQMohOiNZuGaKwSyKsHAcAmpfDXOTUZIfwOvmlotZrquFDFvIvOZ'
pxn = [(2, 10), (13, 20)]
segments = [string[start-1:end] for start,end in pxn]
print(segments)
但是,如果用户提供的值小于零 (0) 或大于字符串的长度,则需要小心。那么这个代码不能完美运行那么你需要使用这个。
string = 'ZlgKgIvhPGClfDtmaXjtqQMohOiNZuGaKwSyKsHAcAmpfDXOTUZIfwOvmlotZrquFDFvIvOZ'
pxn = [(2, 10), (13, 20)]
segments = [string[start:end] for start,end in pxn if start>=0 and end<len(string)]
print(segments)
通过链接功能。希望对理解需要的语句流有用:
- 将间隔转换为切片对象
- 将切片应用于字符串(字符串支持 list-like 访问值)
需要 itertools.starmap
才能正确“提供”slice
函数的参数。
import itertools as it
string = 'ZlgKgIvhPGClfDtmaXjtqQMohOiNZuGaKwSyKsHAcAmpfDXOTUZIfwOvmlotZrquFDFvIvOZ'
pxn = [(2, 10), (13, 20)]
slices = map(string.__getitem__, it.starmap(slice, pxn))
print(list(slices))
# ['gKgIvhPG', 'DtmaXjt']
备注:由于字符串的长度被定义为len = end - start
,因此与子字符串的starting/ending点的概念不匹配。在这种情况下,pxn
可以被预处理:
...
x, y = zip(*pxn)
x = map(int(1).__rsub__, x)
slices = map(string.__getitem__, it.starmap(slice, zip(x, y)))