使用Python

时间:2017-04-29 19:55:34

标签: python string list split

我是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..

有什么想法吗?

3 个答案:

答案 0 :(得分: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内置函数。

答案 1 :(得分:0)

你可以使用python list comprehension。 对于字符串s:

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

s [i:i + 2]从i到i + 2包含子串。

答案 2 :(得分:0)

你可以用这个:

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

请注意,我们没有查看第一个函数中循环中的最后一个索引。那是因为如果我们这样做,当我们试图查看从那个索引开始的两个字符时会产生一个IndexError - 那时我们只剩下一个字符。