GVKun编程网logo

Python 2.7如何比较列表中的项目(python 列表 比较)

2

本篇文章给大家谈谈Python2.7如何比较列表中的项目,以及python列表比较的知识点,同时本文还将给你拓展python–删除元组中列表列表中的项目、python–删除列表中的项目而不减少总数、p

本篇文章给大家谈谈Python 2.7如何比较列表中的项目,以及python 列表 比较的知识点,同时本文还将给你拓展python – 删除元组中列表列表中的项目、python – 删除列表中的项目而不减少总数、python – 如何按顺序比较列表中的项目?、Python – 比较列表列表并选择最大值等相关知识,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

Python 2.7如何比较列表中的项目(python 列表 比较)

Python 2.7如何比较列表中的项目(python 列表 比较)

我今天遇到了这个有趣的例子

class TestableEq(object):
    def __init__(self):
        self.eq_run = False
    def __eq__(self,other):
        self.eq_run = True
        if isinstance(other,TestableEq):
            other.eq_run = True
        return self is other

>>> eq = TestableEq()
>>> eq.eq_run
False
>>> eq == eq
True
>>> eq.eq_run
True
>>> eq = TestableEq()
>>> eq is eq
True
>>> eq.eq_run
False
>>> [eq] == [eq]
True
>>> eq.eq_run    # Should be True,right?
False
>>> (eq,) == (eq,)    # Maybe with tuples?
True
>>> eq.eq_run
False
>>> {'eq': eq} == {'eq': eq}    # dicts?
True
>>> eq.eq_run
False
>>> import numpy as np    # Surely NumPy works as expected
>>> np.array([eq]) == np.array([eq])
True
>>> eq.eq_run
False

因此,似乎容器内部的比较在Python中的工作方式有所不同。我
希望对的调用==将使用的每个对象的实现
__eq__,否则有什么意义呢?另外

class TestableEq2(object):
    def __init__(self):
        self.eq_run = False
    def __eq__(self,other):
        self.eq_run = True
        other.eq_run = True
        return False

>>> eq = TestableEq2()
>>> [eq] == [eq]
True
>>> eq.eq_run
False
>>> eq == eq
False
>>> eq.eq_run
True

这是否意味着Python使用is从容器的实现中的__eq__呢?有没有解决的办法?

我的用例是,我正在构建一个继承自某些
collectionsABC的数据结构,并且我想编写测试以确保我的结构
行为正确。我认为注入一个
比较时记录的值很简单,但是令我惊讶的是,在
检查以确保比较发生时测试失败。

编辑:我应该提到这是在Python 2.7上,但是我
在3.3上看到了相同的行为。

python – 删除元组中列表列表中的项目

python – 删除元组中列表列表中的项目

我有一个元组列表,每个元组包含两个值.第一个值是字符串列表,第二个值是字符串:

list_of_tuples = [(['this','askjsdaddsa','match1'],'done'),(['sajs','skasassas','asdasdasdasd','qwerty'],'doneagain')]

如何将元组中的第一个值减少到只包含六个字母的字符串?理想情况下我会

final_list_of_tuples = [('match1',('qwerty','doneagain')]

到目前为止,我有以下内容:

for a,b in dict_refine:
    a.remove(i for i in a if len(i) != 6)

我觉得好像有一些非常基本的东西,我正在吹过去.有没有办法在一行中做到这一点?输出到字典会更容易吗?

解决方法

与涉及在Python中更改列表的大多数任务一样,此处作业的工具可能是 list comprehension,在本例中,其中两个:

>>> [([word for word in words if len(word) == 6],key) for (words,key) in list_of_tuples]
[(['match1'],(['qwerty'],'doneagain')]

内心理解[单词中的单词如果len(单词)== 6]希望清楚 – 这会将列表过滤为长度为6的单词.外部只将内部一个应用于每个元组的第一个元素并重建元组.

当然,如果您直接使用这些值,则无需构建新列表,您可以正常迭代:

for (words,key) in list_of_tuples:
    six_letter_words = [word for word in words if len(word) == 6]
    ....

python – 删除列表中的项目而不减少总数

python – 删除列表中的项目而不减少总数

参见英文答案 > Replace values in list using Python                                     7个
再来一次.所以我想要做的是,假设我有一个这样的列表:

List = ['one','two','three']

并且他们都被分配到数字0,1,2,例如:

'one': 0,'two': 1,'three': 2

我现在想做的是我想从列表中删除一个项目…让我们说两个

List.remove('two')

但是,如果我这样做,“三个”进入两个位置,总量减少一个.有没有办法可以删除两个,但仍保留列表中的对象总数,删除的对象只是替换为“无”或类似的东西?

解决方法

您可以将其替换为None或使用空字符串”替换:

List[List.index('two')] = None
# List = ['one',None,'three']

要么

List[List.index('two')] = ''
# List = ['one','','three']

python – 如何按顺序比较列表中的项目?

python – 如何按顺序比较列表中的项目?

我对编码非常陌生,正在玩一些玩具问题要学习但是已经碰到了这个问题. (是的,我知道我没有做出好的变量名称).

我试图找到与列表中下一个数字匹配的所有数字的总和.我让它按顺序查看这些项目但是当它碰到一个副本时它似乎被绊倒了.我运行以下代码来检查我的进度:

code_string = "9511484596541141557316984781494999"
list(code_string)
for n in code_string:
   nextn = code_string[code_string.index(n)+1]
   if n == nextn:
      print(n)

而我得到的只是:

1
1
1
1
1
1
1

为什么它会在我的列表中跳转而不是按顺序移动到下一个?它是否与将字符串转换为列表有关?
我想最终用更大的列表来做这件事.

解决方法

index返回字符串中数字的第一个索引,并对字符串执行O(n)查找.你不想使用它.

使用枚举来产生索引&值(但你必须测试索引是否不是最后一个,这1将使你的程序崩溃)或交错(zip)字符串与缺少第一个元素的切片版本:这提供了一个项目及其后继.

然后你可以比较:

code_string = "9511484596541141557316984781494999"
for d1,d2 in zip(code_string,code_string[1:]):
   if d1==d2:
      print(d1)

输出:

1
1
5
9
9

找到这些数字的总和可以用经典的方式实现,或者使用sum和生成器理解在一行中实现(在求和之前将数字转换为整数):

result = sum(int(d1) for d1,code_string[1:]) if d1==d2)

(这是25)

Python – 比较列表列表并选择最大值

Python – 比较列表列表并选择最大值

我有一份清单清单:

l = [['a1',2],['a1',3],1],['b1',4],6],['c1',2]]

我想将每个“子列表”与其他“子列表”进行比较,匹配索引[0]具有相同值的那些,并保留那些具有最大索引[1]的那些,以便结果是这样的:

resultingList = [['a1',2]]

我一直在尝试各种for循环和条件语句,但我已经陷入困境.

有人能帮我一把,让我走上正轨吗?

解决方法

使用 itertools.groupby

from itertools import groupby
l=[['a1',2]]
l = [max(g,key=lambda x: x[1]) for k,g in groupby(sorted(l),key=lambda x: x[0])]

今天关于Python 2.7如何比较列表中的项目python 列表 比较的讲解已经结束,谢谢您的阅读,如果想了解更多关于python – 删除元组中列表列表中的项目、python – 删除列表中的项目而不减少总数、python – 如何按顺序比较列表中的项目?、Python – 比较列表列表并选择最大值的相关知识,请在本站搜索。

本文标签: