本篇文章给大家谈谈Python2.7如何比较列表中的项目,以及python列表比较的知识点,同时本文还将给你拓展python–删除元组中列表列表中的项目、python–删除列表中的项目而不减少总数、p
本篇文章给大家谈谈Python 2.7如何比较列表中的项目,以及python 列表 比较的知识点,同时本文还将给你拓展python – 删除元组中列表列表中的项目、python – 删除列表中的项目而不减少总数、python – 如何按顺序比较列表中的项目?、Python – 比较列表列表并选择最大值等相关知识,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:- Python 2.7如何比较列表中的项目(python 列表 比较)
- python – 删除元组中列表列表中的项目
- python – 删除列表中的项目而不减少总数
- python – 如何按顺序比较列表中的项目?
- 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 – 删除元组中列表列表中的项目
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)
我觉得好像有一些非常基本的东西,我正在吹过去.有没有办法在一行中做到这一点?输出到字典会更容易吗?
解决方法
>>> [([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 – 删除列表中的项目而不减少总数
再来一次.所以我想要做的是,假设我有一个这样的列表:
List = ['one','two','three']
并且他们都被分配到数字0,1,2,例如:
'one': 0,'two': 1,'three': 2
我现在想做的是我想从列表中删除一个项目…让我们说两个
List.remove('two')
但是,如果我这样做,“三个”进入两个位置,总量减少一个.有没有办法可以删除两个,但仍保留列表中的对象总数,删除的对象只是替换为“无”或类似的东西?
解决方法
List[List.index('two')] = None # List = ['one',None,'three']
要么
List[List.index('two')] = '' # List = ['one','','three']
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
为什么它会在我的列表中跳转而不是按顺序移动到下一个?它是否与将字符串转换为列表有关?
我想最终用更大的列表来做这件事.
解决方法
使用枚举来产生索引&值(但你必须测试索引是否不是最后一个,这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 – 比较列表列表并选择最大值
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 – 比较列表列表并选择最大值的相关知识,请在本站搜索。
本文标签: