どのように私は、垂直方向の位置に基づいて、リストのPythonのリスト内の重複する要素の名前を変更するのですか?

jay747:

私はこのようなリストのリストを持っています:

listofLists = [
                ['a', 'b', 'e'],
                ['a', 'd'],
                ['a', 'c'],
                ['a', 'b', 'c', 'e'],
                ['a', 'e', 'c', 'f']
                ]

どのように私は、垂直方向に、この要素のリストを読み、リネーム重複は、増分順序で要素に番号を付けることができますか?出力リストは同じ順序を維持しなければなりません。

例えば、「E」の最初の位置は、リスト内のインデックス1である[「」、「E」、「C」、「F」]、それはそのまま残るべきです。「E」の次の位置は、リスト内のインデックス2 [ '、「B」、「E」]「E1」と改名されるべきです。「E」の最後の位置は、「E3」と改名されなければならないリスト[ '、「B」、「C」、「E」]であります

必要な出力は次のようになります。

requiredOutput = [['a', 'b', 'e1'],
                  ['a', 'd'],
                  ['a', 'c'],
                  ['a', 'b', 'c1', 'e2'],
                  ['a', 'e', 'c1', 'f']]

私が試してみましたコードは、転置リストに照らしてチェックすることにより、以下のとおりです。私のコードは、リストの現在の要素を変更するので、しかし、それは私に必要な出力を与えるものではありません。これが問題文の正しいアプローチである場合、私は知りません。

transformedListOfTuples = list(zip_longest(*listofLists))
transformedListOfList= [list(x) for x in transformedListOfTuples]
for i in range(0, len(listofLists)):
    for j in range(0, len(listofLists[i])):
        pos = -1
        for z in range(0, len(transformedListOfList)):
            if listofLists[i][j] in transformedListOfList[z]:
                pos = pos + 1
                if pos == 0:
                    continue
                elif pos > 0:
                    listofLists[i][j] = listofLists[i][j] + str(pos)
            elif listofLists[i][j] not in transformedListOfList[z]:
                continue
ロボモップ:

これはどう:

arr = [
    ['a', 'b', 'e'],
    ['a', 'd'],
    ['a', 'c'],
    ['a', 'b', 'c', 'e'],
    ['a', 'e', 'c', 'f']
]

listOfRepeated = []
max_len = 0

for i in range(0, len(arr)):
    if max_len < len(arr[i]):
        max_len = len(arr[i])

for j in range(0, max_len):
    list_to_add = []
    for i in range(0, len(arr)):
        if j < len(arr[i]):
            val = arr[i][j]
            # For each iteration of `i`, you'll go down the group

            if not val in list_to_add:
                list_to_add.append(val)

            count = listOfRepeated.count(val)
            if count > 0:
                arr[i][j] = ""+str(val)+""+str(count)

    for element in list_to_add:
        listOfRepeated.append(element)

for list in arr:
    print(list)

出力:

['a', 'b', 'e1']
['a', 'd']
['a', 'c']
['a', 'b', 'c1', 'e2']
['a', 'e', 'c1', 'f']

説明:

j水平に行くためのカウンタであり、iグループをダウンするカウンタです。すべての要素は、現在ありますarr[i][j]

list_to_add 特定のグループごとにユニークな文字が含まれているリストであります

listOfRepeatedこれまで見てきたすべての要素のリストです。一度listOfRepeatedであなたしている存在する場合、それはあなたの現在のグループが文字で最初のものであることを意味します。それが複数回ある場合は、その手段は、あなたは文字の後に番号を追加する必要があります。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=14556&siteId=1