- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我不确定如何组合两个整数列表中的项目,以便保留项目的顺序,并且如果将结果列表连接成一个整数,则结果列表尽可能小。
可能类似于这个问题,虽然给出的答案没有解决我的大小限制: Interleave different length lists, elimating duplicates and preserve order in Python
例如,给定:
a = [3,4,5,7,9,2]
b = [3,5,7,4,2,8]
这两个列表的最短可能组合是:
c = [3,4,5,7,4,9,2,8]
连接整数值为 34574928
在某些情况下,数字的排序不会影响列表长度,但会影响串联整数的大小。在给出的示例中,可以交换 4 和 9,同时仍然保持项目的顺序,但最终的数字会比必要的大。
进一步说明:
最终列表必须包含两个原始列表中每个数字的每个实例。为了更好地表示上述示例中两者的组合:
a = [3,4,5,7, 9,2 ]
b = [3, 5,7,4, 2,8]
c = [3,4,5,7,4,9,2,8]
当然,它不会总是那么干净。在这种情况下,两个列表(3、5、7 和 2)中的四个数字可以完全合并。如果不创建更大的列表,则无法组合其中的四个数字(4、4、9 和 8)。例如:
a = [3, 4,5,7, 9,2]
b = [3,5,7,4, 2,8 ]
bad_c = [3,5,7,4,9,2,8,9,2]
在这种情况下,我只组合了 3 和 4 之一。当将这两个示例结果中的项目连接起来时,我们得到:
c = 34574928
bad_c = 357492892
它们都满足排序要求,但由于有一个满足排序要求但拼接成整数时小于bad_c的结果不同,所以bad_c是不正确的结果。
最佳答案
这是一个相当长但正确的(据我从问题讨论中可以看出)使用递归的实现。
要点:
.pop(index)
遍历两个列表。这让我可以使用递归,因为随着函数的递归,两个列表都变得越来越小,导致一个列表属于 len(0)
。基本上,如果我有类似 [1,2,3]
的东西,然后是 [6,0,4]
,所有第一个列表中的数字将在第二个列表中的第一个数字之前,因为 1236xx 将始终小于 6xxxxx,1236xx 小于 16xxxx,而 1236xx 小于 126xxx,无论为 x 选择的值如何.
z = [None]
#set to None so that z[-1] doesn't throw an out-of-range error
def small_list(a,b): #recursive function
### BASE CASE ###
if len(a) == 0: #if one list empty, can only add rest of other list
for i in b:
if i != z[-1]: #account for duplicates
z.append(i)
# else: #don't add duplicates
return z.pop(0) #end recursion, remove extraneous None
elif len(b) == 0: #if one list empty, can only add rest of other list
for j in a:
if j != z[-1]:#account for duplicates
z.append(j)
# else: #don't add duplicates
return z.pop(0) #end recursion, remove extraneous None
#Otherwise, we need to check whichever is smaller.
#The smaller number should ALWAYS go in the larger place (tens,hundreds,etc.) to make a smaller number.
### RECURSIVE CASE ###
if a[0] < b[0]:
if a[0] != z[-1]:
z.append(a.pop(0))
else:
a.pop(0)
elif a[0] > b[0]:
if b[0] != z[-1]:
z.append(b.pop(0))
else:
b.pop(0)
elif a[0] == b[0]:
a.pop(0)
small_list(a,b) # recur
例子:
z = [None]
l1 = [1,2,3,2]
l2 = [2,1,1,1]
small_list(l1,l2)
print z
第一个示例打印 [1, 2, 1, 3, 2]
,现在是正确的。
z = [None]
l1 = [1,2,3]
l2 = [4,5,6]
small_list(l1,l2)
print z
第二个示例打印 [1, 2, 3, 4, 5, 6]
这也是现在正确的。
下面是它如何计算您上面给出的示例的流程:
# The format is: [final list] len(a) [list a] len(b) [list b]
[] len(a) = 6 [3, 4, 5, 7, 9, 2] len(b) = 6 [3, 5, 7, 4, 2, 8]
# 3 repeated, so remove it.
[] len(a) = 5 [4, 5, 7, 9, 2] len(b) = 6 [3, 5, 7, 4, 2, 8]
# add lower of first two indices to final (4 v 3), and remove from corresponding list
[3] len(a) = 5 [4, 5, 7, 9, 2] len(b) = 5 [5, 7, 4, 2, 8]
# add lower of first two indices to final (4 v 5), and remove from corresponding list
[3, 4] len(a) = 4 [5, 7, 9, 2] len(b) = 5 [5, 7, 4, 2, 8]
# 5 repeated, so remove it.
[3, 4] len(a) = 3 [7, 9, 2] len(b) = 5 [5, 7, 4, 2, 8]
# add lower of first two indices to final (7 v 5), and remove from corresponding list
[3, 4, 5] len(a) = 3 [7, 9, 2] len(b) = 4 [7, 4, 2, 8]
# 7 repeated, so remove it.
[3, 4, 5] len(a) = 2 [9, 2] len(b) = 4 [7, 4, 2, 8]
# add lower of first two indices to final (9 v 7), and remove from corresponding list
[3, 4, 5, 7] len(a) = 2 [9, 2] len(b) = 3 [4, 2, 8]
# add lower of first two indices to final (9 v 4), and remove from corresponding list
[3, 4, 5, 7, 4] len(a) = 2 [9, 2] len(b) = 2 [2, 8]
# add lower of first two indices to final (9 v 2), and remove from corresponding list
[3, 4, 5, 7, 4, 2] len(a) = 2 [9, 2] len(b) = 1 [8]
# add lower of first two indices to final (9 v 8), and remove from corresponding list
[3, 4, 5, 7, 4, 2, 8] len(a) = 2 [9, 2] len(b) = 0 []
# list b is empty, add first element of list a (if non-duplicate)
[3, 4, 5, 7, 4, 2, 8, 9] len(a) = 1 [2] len(b) = 0 []
# list b is empty, add first element of list a (if non-duplicate)
#Finally:
[3, 4, 5, 7, 4, 2, 8, 9, 2]
关于python - 包含两个列表中所有元素的最小列表,同时保留顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23160079/
在开发中的网页上,我在 IE 上遇到此错误 element = $(element); 此代码位于prototype.js 预期对象 如何消除此错误。 更新: 现场也使用了 jQuery。 最佳答
我有两个大小相同的嵌套数组: Array1 =[[1, 2], [], [2, 3]] Array2= [[1, 4], [8, 11], [3, 6]] 我需要将它们合并到一个数组中,如下所示: A
我有一些 jQuery 代码,当单击具有特定 ID 的项目时运行。当 ID 是 的一部分时,它就可以工作。元素,但当它位于 中时则不然元素。为什么会这样呢?我想使用 an,因为如果用户关闭了 Ja
Flex-box 规范 3声明 flex 元素不是 block 容器: A flex item establishes a new formatting context for its content
我遇到了一个意想不到的问题。 HTML JS $(function() { var $divs = $('.myDiv'); // create new div not in
我使用 Bootstrap 和 Ember.js 得到了一个无序列表。每个列表项都是一个显示新帖子的链接,每当您单击该链接时,Ember 都会添加类 active默认情况下。我正在使用 Bootstr
我正在尝试让一个函数正常工作,但运气不佳,所以我想向 Stackoverflow 智囊团提出一个新手问题! 基本上,我有一个表单,并且循环遍历所有元素以查看是否存在自定义数据属性。如果存在,则保持该元
我想映射一个可选数组,删除那些 nil 值,并使用另一个函数映射非 nil 值。 我知道我可以通过使用 compactMap 然后使用常规 map 来实现这一点,但我只想遍历数组一次。 我为此实现了一
我如何定位 li 元素,除非它们出现在 之后元素?换句话说,我想针对步骤而不是注释。 我尝试向 OL 添加一个我想从选择中排除的类,但我想出的代码不起作用。 (顺便说一句,重构 html 不是一种选
Warning 1 The element 'system.webServer' has invalid child element 'rewrite'. List of possible eleme
我正在尝试编写一个脚本,该脚本将遍历 HTML 源并创建 DOM 的 JSON 文件,然后使用 d3.js 在 TreeView 中显示该文件。我遇到的问题是不仅希望显示元素(TITLE、P、LI 等
我有以下 HTML 表单:- Option 1 Option 2
我试图在选定的 HTML 元素之后选择下一个具有类名 slider-value 的 span 元素。我尝试了多种解决方案,但没有一个有效。 我可以通过 id 选择它,但我不希望那样做使代码冗余。 $(
如果电子邮件地址无效,我想在屏幕上显示一条消息“请输入有效的电子邮件地址”。 body 元素的innerHTML 语句工作正常,但我用于p 元素的innerHTML 语句不起作用。 有一次,当我测试它
以下 jQuery 代码调用 ul 元素,查找元素内的前 三个 li 列表项,并隐藏剩余的 li 项目。然后,它附加一个 li 元素,其中显示“显示更多...”,并且在单击时显示之前隐藏的列表项。 (
我问了a question早些时候关于将编辑/删除链接与 h1 元素内联的最佳方法。我能够通过给出的答案实现这一点,但我现在有额外的要求,我需要在 h1 下方显示一个段落并编辑/删除链接。 到目前为止
我使用 MVC 4 和 knockout.js 库版本 2.1.0 显示从服务器检索到的大量文件的表中的以下摘录。 0)"> 正在正确检索数据,
我创建了一个脚本,该脚本在鼠标悬停在父容器上时激活,并且应该将其子元素移离鼠标。我目前已经让它工作了,但是代码的某些部分似乎与 REACT 代码应该是什么样子相矛盾。特别是两个部分。 我在渲染函数中使
我是 JS 新手,正在尝试理解项目 https://github.com/tastejs/todomvc 的代码 请参阅屏幕截图,我尝试对 button X 以及其父元素 div 设置断点,但在这两种
例如,假设有一个带有奇特颜色的标记: Something written here 使用 Visual Studio 2017 和 MVC 5 元素,有没有办法检查和定位当前应用了哪些样式,以及负责它
我是一名优秀的程序员,十分优秀!