a = [1,2,3,4,5]
b = [1,3,5,6]
c = a and b
print c
Run Code Online (Sandbox Code Playgroud)
实际产出:[1,3,5,6]
预期产量:[1,3,5]
我们如何在两个列表上实现布尔AND操作(列表交集)?
我正在玩python并且能够得到两个列表的交集:
result = set(a).intersection(b)
Run Code Online (Sandbox Code Playgroud)
现在,如果d是包含a和b第三个元素的列表c,是否有内置函数用于查找内部所有三个列表的交集d?所以,例如,
d = [[1,2,3,4], [2,3,4], [3,4,5,6,7]]
Run Code Online (Sandbox Code Playgroud)
那么结果应该是
[3,4]
Run Code Online (Sandbox Code Playgroud) 使用以下命令很容易检查列表的元素是否在另一个列表中any():
any(elem in list2 for elem in list1)
Run Code Online (Sandbox Code Playgroud)
但无论如何,有没有惯用的方式来返回找到的第一个元素?
我更喜欢单行解决方案,而不是:
for elem in list1:
if elem in list2:
return elem
Run Code Online (Sandbox Code Playgroud) >>> a = [1,1,1,2,3,4,4]
>>> b = [1,1,2,3,3,3,4]
[1,1,2,3,4]
Run Code Online (Sandbox Code Playgroud)
请注意这不是同一个问题: 两个列表的Python交集保持重复 因为即使列表a中有三个1,列表b中只有两个,因此结果应该只有两个.
首先,我想为糟糕的头衔道歉,但这是我能做的最好的.我试图拍摄很多截图,希望能让它更容易理解.
所以我正在研究一个不和谐的聊天机器人,现在正在开发一个可以作为待办事项清单的功能.我有一个命令将任务添加到列表中,它们存储在dict中.但是我的问题是以更易读的格式返回列表(见图片).
def show_todo():
for key, value in cal.items():
print(value[0], key)
Run Code Online (Sandbox Code Playgroud)
任务存储在dict被调用的中cal.但是为了让机器人实际发送消息,我需要使用return语句,否则它只是将它打印到控制台而不是实际的聊天(见图片).
def show_todo():
for key, value in cal.items():
return(value[0], key)
Run Code Online (Sandbox Code Playgroud)
以下是我尝试修复它的方法,但由于我使用了返回,for循环无法正常工作.
那么我该如何解决这个问题呢?如何使用return语句将其打印到聊天而不是控制台?
请参阅图片以便更好地理解
您好,我是编程和尝试进行测试的新手,它检查项目列表中的任何项目是否存在于另一个列表中(在Python 2.7中使用unittest)。
例如,如果我有一个列表[[dog],“ cat”,“ frog],而我要测试的方法的结果是[” tiger“,” lion“,” kangaroo“,” frog],我希望测试失败,因为它包含上一个列表中的一项(“青蛙”)。我还希望测试告诉我两个列表都有哪些单词(即,哪些单词导致测试失败)。
我试过了:
self.assertIn(["cat", "dog"], method("cat dog tiger"))
Run Code Online (Sandbox Code Playgroud)
该方法的结果为[“ cat”,“ dog”,“ tiger”],但测试结果为失败,并显示:
AssertionError: ['cat', 'dog'] not found in ['cat', 'dog', 'tiger']
Run Code Online (Sandbox Code Playgroud)
我希望此测试返回“确定”,因为第二个列表中存在“猫”和“狗”。这似乎assertIn没有做什么,我还以为它会做(我认为这是检查是否有任何一个存在于b)。
反之亦然,当我希望它失败时会通过assertNotIn传递。
我已经搜索了一段时间,但是因为我不确定要查找的内容而很难找到。
谢谢您的阅读,我希望这是有道理的。
编辑:我已经放弃了克里斯的解决方案,它可以按我的意愿工作:
def myComp(list1, list2):
section = list(set(list1).intersection(list2))
Run Code Online (Sandbox Code Playgroud)
为了获取错误消息中重叠(即触发失败)的单词列表,我从此处添加了以下代码。如何在Python AssertionError中更改消息?:
try:
assert(len(section)==0)
except AssertionError as e:
e.args += ('The following are present in the processed text',
section)
raise
Run Code Online (Sandbox Code Playgroud)
结果正是我想要的:
AssertionError: ('The following are pressent in the processed text', ['dog',
'cat'])
Run Code Online (Sandbox Code Playgroud) 我正在尝试找到一种简单的方法来做到这一点:
list1 = ['little','blue','widget']
list2 = ['there','is','a','little','blue','cup','on','the','table']
Run Code Online (Sandbox Code Playgroud)
我想获得两个列表的公共元素,而list1的顺序保持不变,因此可以预期此结果。
list3 = ['little','blue']
Run Code Online (Sandbox Code Playgroud)
我在用
list3 = list(set(list1)&set(list2))
Run Code Online (Sandbox Code Playgroud)
但是,这仅返回list3 = ['blue','little'],显然,set()只是忽略了顺序。
任何帮助将不胜感激!
我有两个列表看起来像:
list1 = ['a','a','b','b','b','c','d','e','e','g','g']
list2 = ['a','c','z','y']
Run Code Online (Sandbox Code Playgroud)
我想要做的是保持list1的所有元素也在list2中.结果应该是:
outcome= ['a','a','c']
Run Code Online (Sandbox Code Playgroud) 我有以下清单
list1 = [[x1,1,b1],[x2,1,b1],[x3,1,b1],[x4,1,b1]]
Run Code Online (Sandbox Code Playgroud)
和以下
list2 = [[x1,0,b1],[x5,0,b1],[x2,0,b1],[x7,0,b1]]
Run Code Online (Sandbox Code Playgroud)
我不知道如何创建最终列表,例如
list3 = [[x1,1,b1],[x2,1,b1],[x3,1,b1],[x4,1,b1],[x5,0,b1],[x7,0,b1]]
Run Code Online (Sandbox Code Playgroud)
仅当list1中不存在list2 [0] [0]元素时,才保留第一个list1并从list2添加到list1元素
我尝试了以下几种组合方式
for i in list1:
for i2 in list2:
if i[0][0] != i2[0][0]
list3.append(i2)
Run Code Online (Sandbox Code Playgroud)
但是list3显示常见的元素
可能重复:
2个列表之间的公共元素比较
我有两个列表:
[Apples, Bananas, Pears]
[Kiwis, Bananas, Apples]
Run Code Online (Sandbox Code Playgroud)
我想只获得两个列表共享的元素.在python中必须有一些内置函数.
结果:
[Apples, Bananas]
Run Code Online (Sandbox Code Playgroud) python ×10
list ×6
python-2.7 ×3
intersection ×2
python-3.x ×2
arrays ×1
assert ×1
filter ×1
function ×1
return ×1
set ×1
unit-testing ×1