GVKun编程网logo

是否可以保证Python列表的元素保持其插入顺序不变?(python列表只能存储同一类型的数据)

23

最近很多小伙伴都在问是否可以保证Python列表的元素保持其插入顺序不变?和python列表只能存储同一类型的数据这两个问题,那么本篇文章就来给大家详细解答一下,同时本文还将给你拓展c–是否可以保证U

最近很多小伙伴都在问是否可以保证Python列表的元素保持其插入顺序不变?python列表只能存储同一类型的数据这两个问题,那么本篇文章就来给大家详细解答一下,同时本文还将给你拓展c – 是否可以保证UB代码是否可以访问?、html – 具有相对位置和负顶值的元素下方的元素保持不变、Python cookbook(数据结构与算法)从序列中移除重复项且保持元素间顺序不变的方法、Python dict文字和dict(对列表)是否保持其键顺序?等相关知识,下面开始了哦!

本文目录一览:

是否可以保证Python列表的元素保持其插入顺序不变?(python列表只能存储同一类型的数据)

是否可以保证Python列表的元素保持其插入顺序不变?(python列表只能存储同一类型的数据)

如果我有以下Python代码

>>> x = []>>> x = x + [1]>>> x = x + [2]>>> x = x + [3]>>> x[1, 2, 3]

x保证始终是[1,2,3],或者是临时元件的其他排序可能吗?

答案1

小编典典

是的,python列表中元素的顺序是持久的。

c – 是否可以保证UB代码是否可以访问?

c – 是否可以保证UB代码是否可以访问?

我有一个代码片段 from here:
volatile int volatileInt;int usualInt;void function (unsigned x,unsigned y,unsigned z){    volatileInt = 0;    usualInt = (x % y) / z;}int main(){    function(rand(),rand(),rand());}

我用Visual C 10用/ O2编译并得到这个反汇编:

00403940  push        ebx  00403941  push        esi     276:     function(rand(),rand());00403942  mov         esi,dword ptr [__imp__rand (4050C0h)]  00403948  push        edi  00403949  call        esi  0040394B  mov         edi,eax  0040394D  call        esi  0040394F  mov         ebx,eax  00403951  call        esi  00403953  xor         edx,edx  00403955  div         eax,ebx  <<<< possible UB00403957  mov         dword ptr [volatileInt (4074D0h)],0  00403961  mov         eax,edx  00403963  xor         edx,edx  00403965  div         eax,edi  <<<< possible UB00403967  pop         edi  00403968  pop         esi  00403969  pop         ebx  0040396A  mov         dword ptr [usualInt (4074CCh)],eax     277:     return 0;0040396F  xor         eax,eax00403971  ret

请注意,有两个操作 – “mod”和“div”,如果第二个操作数在运行时为零,则可能产生UB.在发出的代码中,两者都使用div操作码实现,这将触发结构化异常并且程序崩溃,第二个操作数为零.

第一个div是在修改volatile int变量之前,但第二个div是在修改volatile int之后.

因此,如果x为零,程序崩溃而不修改volatile int,但如果x为非零且y为零,则程序修改volatile int然后崩溃.

因此,根据x或y是否为零,程序将表现出不同的可观察行为.

是否允许使用可能影响可观察行为的代码的代码与可能的UB进行交错?

解决方法

是的,允许这种实现.见1.9 / 5:

A conforming implementation executing a well-formed program shall produce the same observable behavior as one of the possible executions of the corresponding instance of the abstract machine with the same program and the same input. However,if any such execution contains an undefined operation,this International Standard places no requirement on the implementation executing that program with that input (not even with regard to operations preceding the first undefined operation).

html – 具有相对位置和负顶值的元素下方的元素保持不变

html – 具有相对位置和负顶值的元素下方的元素保持不变

我有3个元素一个在另一个上面.如果我给第二个(粉红色)一个相对位置和负顶值它超过第一个.但第三个没有“跟随”,仍然保持原样:

HTML:

<div id='div1'>text</div>
<div id='div2'>text</div>
<div id='div3'>text</div>

CSS:

div {
    padding: 50px;
}
#div1 {
    background: yellow;
}
#div2 {
    background: pink;
    position: relative;
    top: -50px;
}
#div3 {
    background: gray;
}

Fiddle

如何使第三个和它下面的任何其他元素“跟随”粉红色元素?

解决方法

我不确定你想要达到什么目标,但我希望我能做到这一点.
在你的第三个< div>中给出以下CSS:.检查:)

position: relative;
   top: -50px;

要么,

margin-top: -50px;

其他方式,

div {
    padding: 50px;
}
#div1 {
    background: yellow;
    width:100%;
}
#div2 {
    background: pink;
    position: relative;
    top: -50px;
    width:100%;
    float:left;
}
#div3 {
    background: gray;
    width:100%;
}

JSFiddle

Python cookbook(数据结构与算法)从序列中移除重复项且保持元素间顺序不变的方法

Python cookbook(数据结构与算法)从序列中移除重复项且保持元素间顺序不变的方法

本文实例讲述了Python从序列中移除重复项且保持元素间顺序不变的方法。分享给大家供大家参考,具体如下:

问题:从序列中移除重复的元素,但仍然保持剩下的元素顺序不变

解决方案:

1、如果序列中的值时可哈希(hashable)的,可以通过使用集合和生成器解决。

# example.py
#
# Remove duplicate entries from a sequence while keeping order
def dedupe(items):
  seen = set()
  for item in items:
    if item not in seen:
      yield item
      seen.add(item)
if __name__ == '__main__':
  a = [1,5,2,1,9,10]
  print(a)
  print(list(dedupe(a)))

运行结果:

[1,10]
[1,10]

2、如果序列时不可哈希的,想要去除重复项,需要对上述代码稍作修改:

# example2.py
#
# Remove duplicate entries from a sequence while keeping order
def dedupe(items,key=None):
  seen = set()
  for item in items:
    val = item if key is None else key(item)
    if val not in seen:
      yield item
      seen.add(val)
if __name__ == '__main__':
  a = [ 
    {'x': 2,'y': 3},{'x': 1,'y': 4},{'x': 2,{'x': 10,'y': 15}
    ]
  print(a)
  print(list(dedupe(a,key=lambda a: (a['x'],a['y']))))

运行结果:

[{'x': 2,'y': 15}]
[{'x': 2,'y': 15}]

key参数的作用是指定一个函数用来将序列中的元素转化为可哈希的类型,如此可以检测重复项。

(代码摘自《Python Cookbook》)

更多关于Python相关内容感兴趣的读者可查看本站专题:《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》

希望本文所述对大家Python程序设计有所帮助。

您可能感兴趣的文章:

  • Python cookbook(数据结构与算法)将序列分解为单独变量的方法
  • python计算一个序列的平均值的方法
  • Python过滤函数filter()使用自定义函数过滤序列实例
  • python简单判断序列是否为空的方法
  • Python序列之list和tuple常用方法以及注意事项
  • python实现获取序列中最小的几个元素
  • python中使用序列的方法
  • Python常用的内置序列结构(列表、元组、字典)学习笔记
  • Python序列操作之进阶篇
  • 浅析python中的分片与截断序列
  • Python cookbook(数据结构与算法)找出序列中出现次数最多的元素算法示例

Python dict文字和dict(对列表)是否保持其键顺序?

Python dict文字和dict(对列表)是否保持其键顺序?

是的,在python 3.7+中,任何构建dict的方法都会保留插入顺序。


有关字典文字,请参见Martijn's answer上的How to keep keys/values in same order as declared?

有关理解,请参见documentation。

运行理解后,将生成的键和值元素按它们产生的顺序插入到新字典中。

最后,dict initializer的工作方式是遍历其参数和关键字参数,并依次插入每个参数,类似于:

def __init__(self,mapping_or_iterable,**kwargs):
    if hasattr(mapping_or_iterable,"items"):  # It's a mapping
        for k,v in mapping_or_iterable.items():
            self[k] = v
    else:  # It's an iterable of key-value pairs
        for k,v in mapping_or_iterable:
            self[k] = v

    for k,v in kwargs.items():
        self[k] = v

(这基于source code,但是掩盖了许多不重要的细节,例如dict_init只是dict_update_common的包装。另外请注意,我不知道C,但我明白了要点。)

加上Python 3.6以来关键字参数以相同顺序传递字典 的事实,使得dict(x=…,y=…)保留变量的顺序。

今天关于是否可以保证Python列表的元素保持其插入顺序不变?python列表只能存储同一类型的数据的介绍到此结束,谢谢您的阅读,有关c – 是否可以保证UB代码是否可以访问?、html – 具有相对位置和负顶值的元素下方的元素保持不变、Python cookbook(数据结构与算法)从序列中移除重复项且保持元素间顺序不变的方法、Python dict文字和dict(对列表)是否保持其键顺序?等更多相关知识的信息可以在本站进行查询。

本文标签: