精华内容
下载资源
问答
  • 列表赋值
    千次阅读
    2021-03-21 19:35:25

    列表初始化

    由来

    C++在初始化数组时,可以使用下面花括号加初始值的形式:

    int arr[] = {1, 2, 3};
    

    在C++中,如有下面这样的类:

    class Tester
    {
        public:
            Tester(int value):m_value(value * 2){}
    
        void print(){
            cout << m_value << endl;
        }
    
    private:
        int m_value;
    };
    

    那么它的初始化可以写成这样:

    Tester tester_array[] = {6, 7, 8, 9, 10};
    

    Tester的构造函数可以被正常的调用

    问题是这种方法的运用范围很窄,很多场景都用不了。比如vector

    vector<int> int_vector;
    

    它的初始化方法就下面两种:

    int_vector.push_back(5);
    int_vector.push_back(4);
    int_vector.push_back(3);
    int_vector.push_back(2);
    int_vector.push_back(1);
    
    int int_array[] = {1, 2, 3, 4, 5};
    
    for(int i = 0; i < sizeof(int_array)/sizeof(int_array[0]); ++i)
    {
        int_vector.push_back(int_vector[i]);
    
    }
    

    无论哪种方法,都给人一种如鲠在喉的感觉

    因此,C++11中扩展了使用花括号初始化变量的应用范围,称这种初始化方式为列表初始化

    比如:

    vector<int> int_vector = {5, 4, 3, 2, 1};
    list<int> int_list = {5, 4, 3, 2, 1};
    map<int, const char*> id2Name = {{1,"Zhang"},{2, "Wang"},{3, "Li"}};
    

    另一种写法
    下面和写法也合法,和上面的几种写法等价。

    vector<int> int_vector{5, 4, 3, 2, 1};
    list<int> int_list {5, 4, 3, 2, 1};
    map<int, const char*> id2Name{{1,"Zhang"},{2, "Wang"},{3, "Li"}};
    

    使用场景

    在使用大括号内的初始值设定项列表初始化变量时,将发生列表初始化。 大括号内的初始值设定项列表可在以下情况中使用:

    • 初始化变量
    • 使用关键字初始化类 new
    • 从函数返回对象
    • 自变量传递给函数
    • 直接初始化中的自变量之一
    • 在非静态数据成员的初始值设定项中
    • 在构造函数初始值设定项列表中
    class MyClass {
    public:
        MyClass(int myInt, char myChar) {}
    private:
        int m_int[]{ 3 };
        char m_char;
    };
    class MyClassConsumer{
    public:
        void set_class(MyClass c) {}
        MyClass get_class() { return MyClass{ 0, '\0' }; }
    };
    struct MyStruct{
        int my_int;
        char my_char;
        MyClass my_class;
    };
    int main() {
        MyClass mc1{ 1, 'a' };
        MyClass* mc2 = new MyClass{ 2, 'b' };
        MyClass mc3 = { 3, 'c' };
    
        MyClassConsumer mcc;
        mcc.set_class(MyClass{ 3, 'c' });
        mcc.set_class({ 4, 'd' });
    
        MyStruct ms1{ 1, 'a', { 2, 'b' } };
    }
    

    使用大括号包围的值列表赋值

    {}包围的值列表除了可以用于初始化变量外,还可以用于赋值语句中。

    也就是说:

    vector<int> vi{1, 2, 3, 4, 5};
    

    也可以:

    vector<int> vi;
    vi =678910};
    

    和初始化一样,使用{}包围的值列表也有同样的优势:

    • 一个是防止窄化,可以简单的理解为防止精度降低。比如,下面的代码是无法编译通过的:
    double pai = 3.1415926;
    int pi;
    
    pi = {pai};        //编译错误。
    
    • 另外,如果{}里的初始化列表为空,编译器会创建一个值初始化的临时量并赋值给赋值对象
    更多相关内容
  • 对于下拉列表,采用的是layui结合jQuery方式实现的,在与后台(后台采用springboot框架)交互采用了异步ajax交互,实现了下拉列表赋值与回显的功能。所谓赋值是从数据库中获取数据循环遍历赋值给前端下拉列表选项,...
  • 主要介绍了Python列表赋值,复制,深拷贝以及5种浅拷贝详解,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
  • Python中列表与列表赋值问题

    千次阅读 2022-03-16 10:03:58
    为了解决以上情况,可以直接将ListB中的值赋给ListA,而不是将列表直接赋值过去 运行结果可看出不管改变哪个列表的值,另一个列表都不会发生变化 三、ListA[m:]=ListB ListA从序号m开始往后的元素全部用Lis.....

    定义两个列表ListA与ListB

    一、ListA=ListB

    运行结果发现,可以直接赋值

    这时候给ListB添加一个元素,再运行

    通过结果发现,一旦改变ListB的值,ListA的值也会随之发生改变

    二、ListA=ListB[:]

    为了解决以上情况,可以直接将ListB中的值赋给ListA,而不是将列表直接赋值过去 

     

    运行结果可看出不管改变哪个列表的值,另一个列表都不会发生变化

    三、ListA[m:]=ListB 

    ListA从序号m开始往后的元素全部用ListB进行替换

    结果可看出,列表ListA序号1也就是2的位置往后全部用ListB进行了替换,之后再改变ListB的元素,ListA也不会发生改变

     

     

     

    展开全文
  • 主要介绍了python实现将列表中各个值快速赋值给多个变量,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • 一、浅拷贝和深拷贝 以下文章讲述得很清楚: ...在python中,新建对象赋值实际上是对象的引用。当创建一个对象,然后把它赋给另一个变量的时候,python并没有拷贝这个对象,而只是拷贝了这个对象的引用。 二、Pyt

    一、浅拷贝和深拷贝

    以下文章讲述得很清楚:

    面试题:深拷贝和浅拷贝(超级详细,有内存图)_田江的博客-CSDN博客_深拷贝和浅拷贝

    python深拷贝和浅拷贝的区别 - 米 立 - 博客园 (cnblogs.com)

    python修改列表的值时的地址变化,一个蛮有意思的小实验 - 雾恋过往 - 博客园 (cnblogs.com)

    在python中,新建对象赋值实际上是对象的引用。当创建一个对象,然后把它赋给另一个变量的时候,python并没有拷贝这个对象,而只是拷贝了这个对象的引用。

    二、Python中浅拷贝

    1、了解浅拷贝

    列表赋值,也就是浅拷贝,属于引用类型,被赋值的列表与源列表共同引用一个地址,新列表的值发生改变,源列表的值也跟着变化。

    import numpy as np
    
    A = [0,1,2,3,4,5,6,7,8]
    
    A1 = A;   
    print(A)
    print(A1)             #
    A1.append(9)
    print(A)
    print(A1)
    print('源列表A中各元素的地址:')
    for i in range(len(A)):
        print(id(A[i]))
    print('拷贝列表A1中各元素的地址')
    for i in range(len(A1)):
        print(id(A1[i]))
    

     从运行结果中也可以看出A和A1引用了相同的地址。

     2、拷贝分为:

    (1)浅拷贝 

    A = A1    #改变A1的值,A的值也会发生变化

    (2)copy浅拷贝

    A1 = A.copy()
    
    #或者
    
    import copy
    A1 = copy.copy(A)    #改变A1的值,A的值不会发生改变,除非A中包含子对象,比如:
                         #A = [0,1,2,[3,4,5],6,7,8]
                         #A  copy拷贝给A1之后,若给A1添加一个元素9,则:
                         #A = [0,1,2,[3,4,5],6,7,8]  而A1 = [0,1,2,[3,4,5],6,7,8,9]
                         #若给A1[3]这个元素[3,4,5]添加一个元素9,则:
                         #A = [0,1,2,[3,4,5,9],6,7,8]   A1 = [0,1,2,[3,4,5,9],6,7,8]

    (3)深拷贝

    import copy
    A1 = copy.deepcopy(A)   #深拷贝则是无论A有无子对象,A1改变,A也不会发生改变。

    3、代码解释: 

    import copy
    
    A = [0,1,2,[3,4,5],6,7,8]
    A1 = A                    #1、浅拷贝
    #A1 = copy.copy(A)         #2、copy浅拷贝
    #A1 = copy.deepcopy(A)     #3、深拷贝
    print('源列表:  %s' %A)
    print('拷贝列表: %s' %A1)
    A1.append(9)
    print('A1添加元素后的A列表:%s'%A)
    print('A1添加元素后的A1列表:%s'%A1)
    A1[3].append(9)
    print('A1的子对象添加元素后的A列表:%s'%A)
    print('A1的子元素添加元素后的A1列表:%s'%A1)

    (1) 浅拷贝

    结果可以看出:浅拷贝后,A和A1同步变化。

     (2)copy浅拷贝

     结果可以看到:copy浅拷贝之后,只有A和A1的子对象[3,4,5,9]同步变化。

    (3)深拷贝

     结果可以看到:A和A1不同步变化。

     深拷贝为例,了解拷贝原理:

     A1对A深拷贝之后,A1中的子对象[3,4,5]被拷贝到了另外的地址,其他元素依然引用源列表的地址,但在此基础上可以修改,却不改变源列表。

    4、应用

    python读取dicom图象,然后以不同窗宽显示:

    import matplotlib.pyplot as plt
    import numpy as np
    import pydicom
    import cv2
    import SimpleITK as sitk
    from skimage.morphology import disk, rectangle, binary_dilation, binary_erosion, binary_closing, binary_opening, rectangle, remove_small_objects
    import scipy
    
    def read_dicom_data(file_name):
    'dicom图象读入'
        file = sitk.ReadImage(file_name)
        data = sitk.GetArrayFromImage(file)
        print(data.shape)
        data = np.squeeze(data, axis=0)
        print(data.shape)
        data = np.int32(data)
    
        dicom_dataset = pydicom.dcmread(file_name)
        slice_location = dicom_dataset.SliceLocation         #获取层间距
        return data, data.shape[0], data.shape[1], slice_location
    
    def window(window, img_data):
    'dicom图象窗宽变换'
        if window == 'Lung':
            img_data[img_data < -1150] = -1150
            img_data[img_data > 350] = 350
        elif window == 'Pelvic':
            img_data[img_data < -140] = -140
            img_data[img_data > 260] = 260
        elif window == 'Chest':
            img_data[img_data < -250] = -250
            img_data[img_data > 240] = 240
        elif window == 'Pelvic_scatter':
            img_data[img_data < -700] = -700
            img_data[img_data > 240] = 240
        else:
            img_data[img_data < 0] = 0
            img_data[img_data > 80] = 80
        return img_data
    
    #读入dicom图像
    dcm_path = 'E:/DeepLearningWorkSpace/PyCharmWorkSpace/date/CBCT_Pelvic/Pelvic-Reference-Data/CBCT/BuHui/01/20.dcm'
    pixel_array, rows, columns, slice_location = read_dicom_data(dcm_path)
    plt.subplot(131)
    plt.title('Yuantu')
    plt.imshow(pixel_array, cmap='gray')
    pixel_array1 = pixel_array
    pixel_array2 = pixel_array
    
    pixel_array1 = window('Pelvic',pixel_array1)
    imageData1 = (pixel_array1 - pixel_array1.min()) * 255.0 / (pixel_array1.max() - pixel_array1.min())
    imageData1 = np.uint8(imageData1)
    plt.subplot(132)
    plt.title('window1')
    plt.imshow(imageData1, cmap='gray')
    
    pixel_array2 = window('Pelvic_scatter',pixel_array2)
    imageData2 = (pixel_array2 - pixel_array2.min()) * 255.0 / (pixel_array2.max() - pixel_array2.min())
    imageData2 = np.uint8(imageData2)
    plt.subplot(133)
    plt.title('window2')
    plt.imshow(imageData2, cmap='gray')
    plt.show()

     使用不同的窗宽出现相同的显示结果(第二幅和第三幅图),因为:

    pixel_array1 = pixel_array
    pixel_array2 = pixel_array

    在这里拷贝的时候用了浅拷贝,改变pixel_array1的窗宽时pixel_array和pixel_array2都发生了改变,所以window2是在改变了的pixel_array的基础上进行的。但我们不希望发生这种变化,我们希望window2是在原图上改变,所以,可以改为将浅拷贝改为copy浅拷贝或者深拷贝。

    pixel_array1 = copy.copy(pixel_array)
    pixel_array2 = copy.copy(pixel_array)

    展开全文
  • Python中普通变量赋值与列表赋值的区别 之前没太注意,在Python中,普通变量赋值,新变量与原变量改变,不会相互影响,但是在列表赋值的时候,新变量与原变量指向的是同一地址空间 举例如下: 普通变量赋值: 输出...

    记录一下编程过程中遇到的小bug
    Python中普通变量赋值与列表赋值的区别
    之前没太注意,在Python中,普通变量赋值,新变量与原变量改变,不会相互影响,但是在列表赋值的时候,新变量与原变量指向的是同一地址空间
    举例如下:
    普通变量赋值:
    在这里插入图片描述
    输出是:输出
    列表赋值:在这里插入图片描述
    输出是:在这里插入图片描述

    展开全文
  • 我需要将a列表的值赋给b列表的值,开始是这么写的: a=[1,2,3,4] b=a b.remove(2) print(a) print(b) 但是我移除b中的某个元素时,a中的元素也被移除了,输出结果为: [1, 3, 4] [1, 3, 4] 然后打印两个列表的地址...
  • 除了初始化之外,这种...和初始化一样,使用大括号包围的值列表也有同样的优势。一个是防止窄化,有时可以简单的理解为防止精度降低,例如下面的代码是无法编译通过的: double pai = 3.1415926; int pi; pi = {pai};
  • python中将一个列表赋值给另一个列表

    千次阅读 多人点赞 2020-10-20 18:14:34
    在写杨辉三角时,希望将一个列表直接赋值给另一个列表,就尝试写了一下。 list1 = ['1', '2', '3'] list2 = list1 print(list1) print(list2) 运行结果 ['1', '2', '3'] ['1', '2', '3'] 通过结果发现,可以直接...
  • js给下拉列表赋值

    2020-07-20 14:38:41
    js给下拉列表赋值 请选择 1 2 3 function onclick() { document.getElementById(“Test”).value=“2”; }
  • Python中列表赋值

    千次阅读 2019-09-02 16:05:59
    两种赋值方法最后的结果是不一样的 1.切片处理:把全新的列表赋予新变量了 ,新旧变量操作各不影响 语法: A = B[:] 例: Question: [MCQ] What are the final values of ‘a’ and ‘b’ in the code below? ...
  • Python二维列表赋值问题

    千次阅读 2020-03-24 21:39:33
    Python二维列表赋值问题 使用该方法建立的二维列表,对a[0][0]进行赋值1,结果第一列全部被赋值为1: >>> a = [[0]*5]*5 >>> a [[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, ...
  • 多维列表赋值时,因为创建时地址指向同一内存地址,导致改一个都变了 https://www.cnblogs.com/dfc001/p/11526151.html https://www.oschina.net/question/185041_117637 ... ... ...impo
  • python 函数中的列表赋值

    千次阅读 2019-03-24 22:42:41
    但是如果在函数中对传递来的列表进行赋值操作,则不会影响列表的数据。 这样一段代码 def Merge_sort(arr): arr = [4,6] arr = [6,4,8,1,4,2,7,6] Merge_sort(arr) print(arr) 其输出结果,依然是[6,4,8,1,4...
  • 列表赋值操作

    2019-09-04 09:51:04
    list1 = [1,2,3,4] a,b,c,d = list1 则a = 1 b =2这种方式只有当左边的操作数个数和list1长度相同时,才可以这么做,不然报错. 我们假设我们有一个list对象List,它的长度足够长,想把它从下标i开始的k个元素赋给k个...
  • 今天敲码过程中,突然发现一个地方的代码出来的值不是预期中的结果,具体现象如下:两个列表A=[1,2,3,4],B=[],把A赋值给B,然后再操作B里面的内容,发现B里面的内容发现变化后,A也会发生变化,应该是A给B赋值后B...
  • 列表赋值: >>> a = [1, 2, 3] >>> b = a >>> print b [1, 2, 3] >>> a[0] = 0 >>> print b [0, 2, 3] 解释:[1, 2, 3]被视作一个对象,a,b均为这个对象的引用,因此,改变a[0],b也随之改变 如果希望b不改变,...
  • datagridview中的下拉列表赋值

    热门讨论 2008-11-26 14:17:07
    关于给datagridview中的下拉列表赋值,主要用到的2个参数就是 displaymember(相当于text) 和 valuemember(相当于value)。 用的是vs2008,如果解决方案打不开可以直接看代码,就几行代码,很容易看懂呵呵。
  • C# ListBox列表赋值的两种方式

    千次阅读 2019-08-08 21:34:57
    C# ListBox列表赋值 C#中ListBox控件常用来显示列表信息,如显示指定文件夹下所有文件的路径等。 ListBox控件绑定数据的两种方式: 方式一:为ListBox控件逐一添加数据项 DirectoryInfo dir = new DirectoryInfo...
  • python列表赋值

    2020-12-06 14:44:43
    记录一下Python列表赋值踩过的坑 最近在做计算方法大作业,其中在三次样条插值的算法实现中,输入列表x_i直接复制给了x,但之后出现奇异现象:函数中没有对x_i的改变,为什么x_i无缘无故更改呢? 原来,python中的...
  • Python学习教程:Python列表赋值,复制,深拷贝及5种浅拷贝详解 概述 在列表复制这个问题,看似简单的复制却有着许多的学问,尤其是对新手来说,理所当然的事情却并不如意,比如列表的赋值、复制、浅拷贝、深拷贝等...
  • 今天在写python程序的时候,偶然发现将原列表赋值给一个新变量,原列表变化,新变量也变化。不知道我这个发现是否正确,在此请教各位大佬。 s = [[1,2]] result = s for i in range(2): s.append(list(map(int,...
  • 主要介绍了python创建列表并给列表赋初始值的方法,涉及Python列表的定义与赋值技巧,需要的朋友可以参考下
  • 微信小程序,使用 setData 给两个列表变量赋值同一个数据时,当其中一个列表变量发生改变,另外一个变量也会随之改变,例如 wx.request({ url: app.url + 'api/getSelect', header: { 'Content-Type': '...
  • C++11新特性(2)- 列表初始化除了初始化之外,这种形式也可以用于赋值语句中。先回顾一下初始化变量时的情况:vector&lt;int&gt; vi{1, 2, 3, 4, 5};接下来是赋值的情况:vector&lt;int&gt; vi;vi ...
  • python循环中对一个列表赋值问题

    千次阅读 2020-12-22 01:04:22
    参考:https://www.cnblogs.com/zf-blog/p/10613981.htmlhttps://www.cnblogs.com/andywenzhi/p/7453374.html?tdsourcetag=s_pcqq_aiomsgpython的赋值方式是...如下图示: 不同于c的赋值方式:先为变量分配内存,然...
  • 如下所示: <!DOCTYPE html> <html> <head> <title>排课设置<...content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">...link rel="stylesheet
  • Python-列表赋值

    千次阅读 2018-04-04 17:08:51
    cars = ['bmw', 'audi', 'benz', 'ford', 'jaguar'...# 赋值全部 other_cars = cars print(other_cars) # 赋值部分 other_cars = cars[0:2] print(other_cars) 输出 ['bmw', 'audi', 'benz', 'ford', 'jaguar'...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 604,178
精华内容 241,671
关键字:

列表赋值