python - 先进的阵列结构

标签 python arrays variables

我的字典具有以下结构:

a = 'stringA'
b = 'stringB'
c = 'stringC'

endpoints = {
    'foo1': a + 'string1' + b,
    'foo2' : a + 'string2' + c + 'string3' + b,
}

我的问题如下:当我调用endpoints['foo2']时,我得到了预期的数组值。但是,当我在数组声明和 endpoints['foo2'] 的使用之间更改例如 c 的值时,c< 的值 未更新。

知道为什么会发生这种情况以及如何解决吗?

PS:我知道这可以通过创建一个简单的函数来完成,但我认为这会非常低效。

最佳答案

你可以这样做:

a = ['stringA']
b = ['stringB']
c = ['stringC']

endpoints = {
    'foo1': a ,
    'foo2' : b
}

print(endpoints['foo1']) #returns "[stringA]"

a[0]='otherString'

print(endpoints['foo1']) #returns "[otherString]"

您可以这样做,因为您可以更改列表中的值而不更改引用;

aendpoints 仍然为 a 使用相同的空间

这对于纯字符串来说是不可能的,因为如果没有新的分配,您就无法更改它们。 Python 中的字符串是不可变的

编辑:另一种可能性是创建您自己的字符串类。

这会删除[]括号:

class MyStr:

    def __init__(self,val):
        self.val=val

    def __repr__(self):
    #this function is called by dict to get a string for the class
        return self.val

    def setVal(self,val):
        self.val=val

a=MyStr("abcd")
b={1:a}
print(b) #prints {1:"abcd"}
a.setVal("cdef")
print(b) #prints {1:"cdef"}

免责声明:正如评论中所解释的,我仍在使用 python 2.7

虽然 Python 3 和 2.7 大部分兼容,但在尝试使用它时可能会出现一些较小的错误。

关于python - 先进的阵列结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36259740/

相关文章:

c - 在不知道元素数量的情况下迭代准备好的结构体数组 c 的正确简单声明

c# - 在 C# 中将 List<string> 转换为 DataRow

Java 2d 数组正在打印我认为内存中的垃圾而不是元素

php - 如何全局使用 vbulletin 变量?

python - 使用 For 循环更改字符串中的单词以列出项目

python - 基于从 Pandas DataFrame 中其他 2 列的值进行条件选择的新列

r - 同样地向数据框添加新变量

javascript - 变量名称的串联

python - 使用 lxml 按属性查找元素

python - 包含来自多个列表的数据的字典结构