亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用現有列表打印新列表

使用現有列表打印新列表

瀟瀟雨雨 2021-08-14 19:33:05
我想要一個這樣的列表:['5', '0 1', '1 2', '1 8', '2 3'] 并返回一個由這樣的元組組成的新列表: [(0, [1]),(1,[0,2,8]),(2[1,3]),(3,[2]),(8,[1])]。每個元組的第一個元素是一個整數,第二個元素是一個整數列表,它出現在原始列表中。我不能使用字典、集合、雙端隊列、二等分模塊。def create_network(file_name):    friends = open(file_name).read().splitlines()    network=[]    for strings in friends:        relationship=strings.strip().split(' ')        if len(relationship)==2:             a,b=relationship             a=int(a)             b=int(b)             if a>=len(network):                 network.append((a,[b]))             else:                 wow=network[a]                 wow[1].append(b)                 network[a]=wow    return network這是我到目前為止。我希望它返回: [(0, [1, 2, 3]), (1, [0, 4, 6, 7, 9]), (2, [0, 3, 6, 8, 9]) , (3, [0, 2, 8, 9]), (4, [1, 6, 7, 8]), (5, [9]), (6, [1, 2, 4, 8]) , (7, [1, 4, 8]), (8, [2, 3, 4, 6, 7]), (9, [1, 2, 3, 5])] 但它返回 [(0 , [1, 2, 3]), (1, [4, 6, 7, 9]), (2, [3, 6, 8, 9]), (3, [8, 9]), (4 , [6, 7, 8]), (5, [9]), (6, [8]), (7, [8])]。我不知道為什么它不起作用。
查看完整描述

2 回答

?
白衣非少年

TA貢獻1155條經驗 獲得超0個贊

你可以這樣做:


from itertools import combinations



def create_network(lst):

    seen = {}


    for e in lst:

        for s, t in combinations(map(int, e.split()), 2):

            seen.setdefault(s, set()).add(t)

            seen.setdefault(t, set()).add(s)


    return [(k, sorted(values)) for k, values in seen.items()]



data = ['5', '0 1', '1 2', '1 8', '2 3']

result = create_network(data)


print(result)

輸出


[(0, [1]), (1, [0, 2, 8]), (2, [1, 3]), (3, [2]), (8, [1])]

一般的想法是創建一個字典,其中鍵是整數,值是它旁邊出現的一組整數。該語句map(int, e.split())創建一個整數迭代,然后使用組合從迭代中挑選每一個可能的對,將每一對添加到字典中,最后返回值排序的元組。


更新 (不使用任何內置模塊)


def combinations(m, lst):

    if m == 0:

        return [[]]

    return [[x] + suffix for i, x in enumerate(lst) for suffix in combinations(m - 1, lst[i + 1:])]



def create_network(lst):

    uniques = []

    for s in lst:

        for e in map(int, s.split()):

            if e not in uniques:

                uniques.append(e)


    result = []

    for number in uniques:

        seen = []

        for e in lst:

            values = list(map(int, e.split()))

            for s, t in combinations(2, values):

                if s == number:

                    if t not in seen:

                        seen.append(t)

                elif t == number:

                    if s not in seen:

                        seen.append(s)

        if seen:

            result.append((number, sorted(seen)))


    return sorted(result)



data = ['5', '0 1', '1 2', '1 8', '2 3']

network = create_network(data)

print(network)

輸出


[(0, [1]), (1, [0, 2, 8]), (2, [1, 3]), (3, [2]), (8, [1])]

上面的代碼沒有使用 set、dictionary 和任何外部模塊。請注意,它可能會很慢。


查看完整回答
反對 回復 2021-08-14
?
智慧大石

TA貢獻1946條經驗 獲得超3個贊

您可以使用列表理解:


d = ['5', '0 1', '1 2', '1 8', '2 3']

def find_edges(_d, c):

  return [(a if b == c else b) for a, b in _d if c in [a, b]]


new_d = [[int(c) for c in i.split()] for i in d if len(i) > 1]

_final = []

for i in [h for d in new_d for h in d]:

   if not any(j == i for j, _ in _final):

      _final.append((i, find_edges(new_d, i)))

輸出:


[(0, [1]), (1, [0, 2, 8]), (2, [1, 3]), (8, [1]), (3, [2])]


查看完整回答
反對 回復 2021-08-14
  • 2 回答
  • 0 關注
  • 204 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號