>

주어진 문자열을 다른 목록의 문자열 색인으로 대체하는 목록 목록을 만들려고합니다.

나는 for 를 시도했다  아래와 같이 루프

l = ['FooA','FooB','FooC','FooD']
data = [['FooB','FooD'],['FooD','FooC']]
indices = []
for sublist in data:
    for x in sublist:
        indecies.append(l[list.index(x)])

내가 얻을 수 있기를 바라고있다 : indices = [[1,3],[3,2]]   요소의 데이터 유형은 str 가 될 수 있지만  필요한 경우

이와 비슷한 것을 얻을 수있는 가장 가까운 것은 2로 채워진 2x2 목록입니다

  • 답변 # 1

    이 작업을 수행하는 방법은 먼저 각 색인에 사전 매핑 문자열을 만들고 중첩 된 목록 이해를 사용하여 중첩 된 목록에서 값을 찾는 것입니다.

    from itertools import chain
    d = {j:i for i,j in enumerate(chain.from_iterable(l))}
    # {'FooA': 0, 'FooB': 1, 'FooC': 2, 'FooD': 3}
    [[d[j] for j in i] for i in data]
    # [[1, 3], [3, 2]]
    
    

  • 답변 # 2

    코드에 맞게 유지하려면 다음과 같이 변경하면됩니다.

    l = ['FooA','FooB','FooC','FooD']
    data = [['FooB','FooD'],['FooD','FooC']]
    indices = []
    for sublist in data:
        temp = []
        for x in sublist:
            temp.append(l.index(x))
        indices.append(temp)
    print(indices)
    # [[1, 3], [3, 2]]
    
    

  • 이전 javascript - 목록에서 다른 l로 LookupId의 MS Graph API 사용
  • 다음 c# - 필수 위조 방지 양식 필드 "__RequestVerificationToken"이 없습니다 AngularJs MVC