如何在python中将一个元素从列表移动到另一个

亚当
def ListNum(x):
    list1 = []
    for i in (x):
        if x[i] < x [i + 1]:
            list1.append[i]
        else:
            break
    return(list1)
ListNum([1,2,3,4,5,6,2,3,4])

因此,我输入了一个数字列表,然后遍历该列表,并检查该列表中的第一个值是否小于第二个值(如果是),将其添加到list1,继续操作,直到该值大于下一个值。

所以,如果我输入 ListNum([1,2,3,4,5,6,2,3,4])

我应该得到 list1[1,2,3,4,5,6]

但它不起作用

2号环

我假设你永远要在添加的最后一个项目xlist1,因为没有后可进行对比的项目。

您的代码不能正常工作,因为for i in (x):在迭代项目x,而不是他们的索引。但是,即使它确实遍历了索引,您的代码也可能会崩溃,IndexError原因是它可能会尝试将列表中的最后一项与其后的一项进行比较(不存在)

这里有几种方法可以做到这一点。

from itertools import takewhile

def list_nums0(x):
    list1 = []
    for i in range(len(x) - 1):
        if x[i] < x[i + 1]:
            list1.append(x[i])
        else:
            break
    return list1

def list_nums1(x):
    list1 = []
    for u, v in zip(x, x[1:]):
        if u < v:
            list1.append(u)
        else:
            break
    return list1

def list_nums2(x):
    list1 = []
    for i, u in enumerate(x[:-1], 1):
        if u < x[i]:
            list1.append(u)
        else:
            break
    return list1

def list_nums3(x):
    return [t[0] for t in takewhile((lambda a:a[0] < a[1]), zip(x, x[1:]))]

list_nums = list_nums3
print(list_nums([1,2,3,4,5,6,2,3,4]))

输出

[1, 2, 3, 4, 5]

list_nums0只需迭代的索引x

list_nums1用于zipx上并行进行迭代x[1:]这会将当前和下一个项目放入u和中v

list_nums2用于enumerate获取中的当前项目u以及中的下一项的索引i

list_nums3用于takewhile迭代产生的元组,zip直到我们得到一对不满足测试的项目。它以列表理解的方式执行整个操作,这比.append在传统for循环中使用效率更高


如果到此为止,这些版本也会在列表中添加最后一项。执行此操作的简单方法是创建一个新的临时列表,该列表的最后一项保证大于“实际”最后一项。

from itertools import takewhile

def list_nums0(x):
    x = x + [x[-1] + 1]
    list1 = []
    for i in range(len(x) - 1):
        if x[i] < x[i + 1]:
            list1.append(x[i])
        else:
            break
    return list1

def list_nums1(x):
    list1 = []
    for u, v in zip(x, x[1:] + [x[-1] + 1]):
        if u < v:
            list1.append(u)
        else:
            break
    return list1

def list_nums2(x):
    x = x + [x[-1] + 1]
    list1 = []
    for i, u in enumerate(x[:-1], 1):
        if u < x[i]:
            list1.append(u)
        else:
            break
    return list1

def list_nums3(x):
    return [t[0] for t in takewhile((lambda a:a[0] < a[1]), zip(x, x[1:] + [x[-1] + 1]))]

# test all the functions

funcs = (
    list_nums0,
    list_nums1,
    list_nums2,
    list_nums3,
)

data = [1, 2, 3, 4, 5, 6, 0]
print('data', data)
for i, list_nums in enumerate(funcs):
    print(i, list_nums(data))

data = [1, 2, 3, 4, 5, 6]
print('data', data)
for i, list_nums in enumerate(funcs):
    print(i, list_nums(data))

输出

data [1, 2, 3, 4, 5, 6, 0]
0 [1, 2, 3, 4, 5]
1 [1, 2, 3, 4, 5]
2 [1, 2, 3, 4, 5]
3 [1, 2, 3, 4, 5]
data [1, 2, 3, 4, 5, 6]
0 [1, 2, 3, 4, 5, 6]
1 [1, 2, 3, 4, 5, 6]
2 [1, 2, 3, 4, 5, 6]
3 [1, 2, 3, 4, 5, 6]

当然,如果您传递一个空列表,此策略将失败。解决这个问题的简单方法是将其放在函数顶部:

if not x:
    return []

例如,

def list_nums1(x):
    if not x:
        return []
    list1 = []
    for u, v in zip(x, x[1:] + [x[-1] + 1]):
        if u < v:
            list1.append(u)
        else:
            break
    return list1

我们可以这样重写list_nums3以使其单线:

def list_nums3(x):
    return [] if not x else [t[0] for t in takewhile((lambda a:a[0] < a[1]), zip(x, x[1:] + [x[-1] + 1]))]

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何将一个元素移动到另一个元素?

如何在Java中将一个列表转换为另一个列表?

如何在Android中将Firebase子节点从一个节点移动到另一个节点?

在jQuery UI排序中将列表项从一个列表移动到另一个列表后,如何更新排序顺序号

如何在Python3中将一个列表中的元素添加到另一个列表中?

将字段从一个列表移动到另一个列表

找到一个元素并将其移动到另一个元素下方

如何在Python中将具有随机名称的文件从一个文件夹移动到另一个文件夹?

如何将元素从一个链接列表顺序移动到另一个列表

使用powerapps将元素从列表移动到共享点中的另一个列表

如何在Tkinter中将多个项目从一个列表框移动到另一个列表框?

如何使用mongoose在MongoDB中将元素从一个数组位置移动到另一个数组位置?

如何在Vue Js中将数组项移动到另一个数组

如何在命令行中将文件夹移动到另一个文件夹

将元素从一个地方移动到另一个地方

如何在Ubuntu 14中将用户文件夹移动到另一个分区(NTFS)

如何在python中求和与另一个列表的元素相对应的列表元素

使用JQuery将列表元素从一个无序列表移动到另一个

如何在python中将项目从一个列表移动到另一个列表?

使用JQuery将元素从列表移动到另一个列表

将元素从一个包移动到另一个包

C:将元素从一个列表移动到另一个列表

将一个段落元素移动到另一个段落元素旁边

将列表项从一个 ul 元素移动到另一个 ul 元素

在 Python 中将重复行从列子集移动到另一个数据框

视觉上从一个 html 元素移动到另一个 - Javascript

如何在 Git 中将一些文件(不是全部)从一个分支移动到另一个分支?

如何在shell脚本中将文件从当前目录移动到另一个目录?

如何将画布元素移动到另一个画布元素之上