Модификация кортежей в списках - PullRequest
0 голосов
/ 13 марта 2012

Я прошу прощения за то, что задал такой простой вопрос, но я пытался найти этот сайт и до сих пор не нашел ответ, который работает.

У меня есть следующий список с кортежами внутри него:

[('1', '1', '1', '1'), ('1', '1', '1', '2'), ('1', '1', '1', '3'),
 ('1', '1', '1', '4'), ('1', '1', '2', '2'), ('1', '1', '2', '3'),
 ('1', '1', '2', '4'), ('1', '1', '3', '3'), ('1', '1', '3', '4'),
 ('1', '1', '4', '4'), ('1', '2', '2', '2'), ('1', '2', '2', '3'),
 ('1', '2', '2', '4'), ('1', '2', '3', '3'), ('1', '2', '3', '4'),
 ('1', '2', '4', '4'), ('1', '3', '3', '3'), ('1', '3', '3', '4'),
 ('1', '3', '4', '4'), ('1', '4', '4', '4'), ('2', '2', '2', '2'),
 ('2', '2', '2', '3'), ('2', '2', '2', '4'), ('2', '2', '3', '3'),
 ('2', '2', '3', '4'), ('2', '2', '4', '4'), ('2', '3', '3', '3'),
 ('2', '3', '3', '4'), ('2', '3', '4', '4'), ('2', '4', '4', '4'),
 ('3', '3', '3', '3'), ('3', '3', '3', '4'), ('3', '3', '4', '4'),
 ('3', '4', '4', '4'), ('4', '4', '4', '4')]

Я хочу заменить все «1» другим списком под названием «List1». Затем я хочу изменить все 2s на List2 и 3s на List3 и т. Д .... В конце я хочу что-то вроде этого:

[[[List1StuffA, List1StuffB, List1StuffC], [List1StuffA, List1StuffB, List1StuffC],
  [List1StuffA, List1StuffB, List1StuffC], [List1StuffA, List1StuffB, List1StuffC]),
 ([List1StuffA, List1StuffB, List1StuffC], [List1StuffA, List1StuffB, List1StuffC],
  [List1StuffA, List1StuffB, List1StuffC], [List2StuffA, List2StuffB, List2StuffC]),
 ([List1StuffA, List1StuffB, List1StuffC], [List1StuffA, List1StuffB, List1StuffC],
  [List1StuffA, List1StuffB, List1StuffC], [List3StuffA, List3StuffB, List3StuffC]),
 ([List1StuffA, List1StuffB, List1StuffC], [List1StuffA, List1StuffB, List1StuffC],
  [List1StuffA, List1StuffB, List1StuffC], [List4StuffA, List4StuffB, List4StuffC]),
 ...]

и т. Д., Где List1 = [List1StuffA, List1StuffB, List1StuffC]

Кажется, я не могу обойти бит «не могу изменить кортежи», и я не могу изменить каждый элемент кортежа из большого списка в сам список (и заставить его оставаться таким).

Я пробовал что-то вроде этого:

for item in OverallList:
    item = list(item)
    for x in item:
        x = x.replace('1', List1)
        x = x.replace('2', List2)
        x = x.replace('3', List3)
        x = x.replace('4', List4)

Но когда я распечатал Общий список, ничего не изменилось.

Любая помощь будет принята с благодарностью, и мне снова жаль, если я просто пропустил ответ, который будет работать (или применил его неправильно).

Ответы [ 3 ]

1 голос
/ 13 марта 2012

вам нужно будет вставить ваш item обратно в OverallList

for idx, item in enumerate(OverallList):
    item = [{'1':List1, '2':List2, '3':List3, '4':List4}[k] for k in item]
    OverallList[idx] = item
0 голосов
/ 13 марта 2012

Я думаю, что когда вы помещаете 'item = list (item)', что вы больше не ссылаетесь на кортеж - 'item' - это список, который создается из существующего кортежа, который все еще находится в списке.Попробуйте напечатать 'x' в вашем цикле, и вы получите список с ожидаемым содержимым.Если это так, все, что вам нужно сделать, это удалить кортеж, изменить его, а затем вставить его обратно с помощью взлома.

0 голосов
/ 13 марта 2012

Когда вы выполняете item = list(item) в цикле for, вы теряете ссылку на OverallList.Поэтому любые изменения в item не отражаются в OverallList.То же самое относится к x в item.

...