使用Python将字符串解析为重叠对

2024-09-28 01:27:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我是Python新手,正在尝试将节点路径列表解析为每一对 出现在小路上。例如:

我有一个列表(对于节点x、y和z)如下所示

list = ['xyzx', 'xzyx', 'zxyz', 'zyxz', 'yxzy', 'yzxy']

我可以在任意位置拆分每个字符串,但我需要将它们拆分为重叠的有序对,以得到如下结果:

newList = [('xy', 'yz', 'zx'), ('xz', 'zy', 'yx'), etc..]

或者每个排列的单独列表也可以:

newList1 = ['xy', 'yz', 'zx']
newList1 = ['xz', 'zy', 'yx']
etc..

有什么想法吗?你知道吗


Tags: 路径列表节点etclistxyxzzx
3条回答

你可以使用python列表理解。 对于字符串s:

[s[i:i+2] for index in range(len(s) - 1)]

s[i:i+2]从i到i+2取一个子串,不包含。你知道吗

您可以使用列表生成它们,如下所示:

l = ['xyzx', 'xzyx', 'zxyz', 'zyxz', 'yxzy', 'yzxy']

[tuple(s[i:i+2] for i in range(len(s)-1)) for s in l]

# [('xy', 'yz', 'zx'), ('xz', 'zy', 'yx'),
#  ('zx', 'xy', 'yz'), ('zy', 'yx', 'xz'),
#  ('yx', 'xz', 'zy'), ('yz', 'zx', 'xy')]

请注意,应该避免将列表命名为“list”,因为这是一个Python内置函数。你知道吗

你可以用这个:

def get_overlapping_pairs(string):
    ret = [] # we will return this later
    for i in range(len(string)-1): # loop through all indices except the last one
        ret.append(string[i:i+2]) # append to ret the two characters
                                  # beginning at that index
    return tuple(ret) # convert to tuple

def get_overlapping_pairs_for_each(stringlist):
    ret = []
    for string in stringlist: # loop through each string
        ret.append(get_overlapping_pairs(string)) # append the overlapping
                                                  # pairs for that string
    return ret

注意,我们没有在第一个函数中查看循环中的最后一个索引。这是因为如果我们这样做了,它会生成一个索引器,当我们试图查看从索引开始的两个字符时,我们到那里的时候只剩下一个字符了。你知道吗

相关问题 更多 >

    热门问题