Multiple references in separate lists; Python

ぐ巨炮叔叔 提交于 2019-12-13 05:07:58

问题


I'm trying to basically create references to plot multiple relationships and store them in a list or possibly a dictionary.

Basically:

variable1 = 10

//in this case, 'ref' denotes that the variable should be a reference)
listA = [variable1(ref), variable2, variable3]
listB = [variable1(ref), variable4, variable5]

for i in listA:
i = i + 10

for i in listB:
i = i + 10

print listA[0]
//Should print 30

print listB[0]
//Should print 30

How can I split two references to the same variable into two separate lists?


回答1:


What about two lists, each containing keys of the same collection, say dictionary?

For example:

MASTER = [10,11,12,13,14]

LISTA = [0,1,2]
LISTB = [0,3,4]

for i in LISTA: MASTER[i] += 10
for i in LISTB: MASTER[i] += 10

print MASTER[LISTA[0]]

print MASTER[LISTB[0]]

ideone example

Or using a wrapper class:

class SharedInt:
    val = None
    def __init__(self, v): self.val = v

    def __add__(self, a): 
        self.val += a
        return self.val

    def __int__(self): return self.val

v1 = SharedInt(10)

listA = [v1, 11, 12]
listB = [v1, 13, 14]

for i in listA: i += 10
for i in listB: i += 10

print int(listA[0])
print int(listB[0])

ideone example

Lastly, or using embedded lists:

v1 = [10]

listA = [v1, 11, 12]
listB = [v1, 13, 14]

for i in listA: 
    if isinstance(i, list): i[0] += 10 
    else: i += 10
for i in listB: 
    if isinstance(i, list): i[0] += 10 
    else: i += 10

print listA[0]
print listB[0]

ideone example

Note that the first example treats all of your ListX members as "references" while the last two examples treats the members as "values", unless you make them SharedInt()s or enclose them in a list respectively.

In other words,

LISTA[1] = 21 # First example
ListA[1] = 11 # Second, third examples


来源:https://stackoverflow.com/questions/18937708/multiple-references-in-separate-lists-python

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!