如何将 ['1 0', '2 0', '3 1 2'] 设为 [[1, 0], [2,0] , [3,1] , [ 3,2] ] 以便我可以解压缩值。蟒。邻接列表



我的目标是获取包含诸如[' 1 0 ', ' 2 0 ', ' 3 1 2 ']或[[' 1 0 '],[' 2 0 '],[3 1 2的]]

并将其转换为邻接表,如下所示:[[1,0], [2,0], [3,1], [3,2]]

我的问题是,列表中的最后一个字符串有两个以上的数字['3 1 2']。这将导致解包子列表生成如下所示的错误:

Traceback (most recent call last):
File "/tmp/source.py", line 79, in <module>
for dest, src in nlist:
ValueError: too many values to unpack (expected 2)

目前代码:

linelist: ['1 0', '2 0', '3 1 2']

newlist = []    
print("linelist1", linelist)
for word in linelist:
word = word.split(",")
newlist.append(word)

newlist: [['1 0'], ['2 0'], ['3 1 2']]

adj_list  = {}
nlist = []
for inner_list in newlist:
values = [int(x) for x in inner_list[0].split()] # splits each sublist
nlist.append(values)
adj_list [values[1]] = values[0:]
adj_list = defaultdict(list)
for dest, src in nlist:
adj_list[src].append(dest)

应该输出:[[1,0],[2,0],[3,1],[3 2]]

您可以尝试:

lst = ["1 0", "2 0", "3 1 2"]
out = []
for s in lst:
n, *rest = map(int, s.split())
out.extend([n, v] for v in rest)
print(out)

打印:

[[1, 0], [2, 0], [3, 1], [3, 2]]

这是你想要的吗?阅读这里的字里行间:

def convertList(argi):
# convert list of strings to list of lists
resultArr = []
for item in argi:
resultArr.append(item.split(" "))
if len(resultArr[-1]) > 2:
firstItem = resultArr[-1][0]
resultArr[-1] = resultArr[-1][1:]
for item in resultArr[-1]:
resultArr.append([firstItem, item])
resultArr = [item for item in resultArr if len(item) == 2]
return resultArr

print(convertList(['1 0', '2 0', '3 1 2 4 5 6', '3 7 8 9 10 11']))

输出:

[['1', '0'], ['2', '0'], ['3', '1'], ['3', '2'], ['3', '4'], ['3', '5'], ['3', '6'], ['3', '7'], ['3', '8'], ['3', '9'], ['3', '10'], ['3', '11']]

假设每个字符串中不少于2个元素

lst = ['1 0', '2 0', '3 1 2']
nlist = [z.split() for z in lst]
res = []
for i in range(len(nlist)):
if len(nlist[i]) > 2:
for k in range(1, len(nlist[i])):
res.append([nlist[i][0], nlist[i][k]])
else:
res.append(nlist[i])
print(res)

,输出为

[['1', '0'], ['2', '0'], ['3', '1'], ['3', '2']]

从你想要的输入到输出,我们所需要做的就是

  1. 读取列表中的每个条目
  2. 在空格上拆分每个条目
  3. 将每个条目转换为int
  4. 与每个子列表中的第一个元素和所有其他元素创建配对。From input ('inp')
['1 0', '2 0', '3 1 2']

def convert_to_pairs(inp: list[str]) -> list[list[int]]:
xs = [x.split(' ') for x in inp] # split on space
xs = [[int(y) for y in x] for x in xs] # convert to int
result = [] # (to store final result)
for entry in xs:
if len(entry) <= 2: # we don't need to do any extra stuff
result.append(entry)
continue
for i in range(1, len(entry)):
result.append([entry[0], entry[i]]) # create each pairing needed
return result

输出将是

[[1, 0], [2, 0], [3, 1], [3, 2]]

最新更新