我是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..有什么想法吗?
发布于 2017-04-29 19:59:27
您可以使用列表理解来生成它们,如:
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内置函数。
发布于 2017-04-29 20:00:06
您可以使用python列表理解。对于字符串s:
[s[i:i+2] for index in range(len(s) - 1)]si:i+2接受一个从i到i+2的子字符串,这是不包含的。
发布于 2017-04-29 20:02:24
你可以用这个:
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 --当我们到达该索引时,只剩下一个字符。
https://stackoverflow.com/questions/43699916
复制相似问题