我正在编辑此查询,如果有人认为我有,请接受我的道歉 误导他们解决不同的问题。我有一个包含的文件 行星的名称,如下所示:
Neptune
Venus
Pluto
Uranus
Jupiter
Saturn
Mars
Earth
Mercury
Majikthise
请注意,其中一个不是行星(现在,让我们假设冥王星是一颗行星),我有一个命名行星列表,看起来像这样:
planets = ['Neptune', 'Venus', 'Pluto', 'Uranus', 'Jupiter', 'Saturn',
'Mars', 'Earth', 'Mercury']
现在,我正在尝试检查文件是否包含任何非行星词,当我找到一个时,我将它移动到行星列表中的适当位置,例如列表是否已排序。所以如果我打印列表的输出应该是这样的:
['Neptune', 'Venus', 'Majikthise', 'Pluto', 'Uranus', 'Jupiter', 'Saturn',
'Mars', 'Earth', 'Mercury']
请注意,在上面的输出中,“Majikthise”就在它的位置 在此列表 if 此列表已排序。我之前的印象是 我能够做到这一点,但我不能够做到这一点,我想我能做到 由于我用来测试代码的输入的特殊性,即我使用过的 'Abracadabra'在这个名单中的自然位置将在开头(如果 排序)和我发现它的那些,但我正在做的只是追加 行星列入非行星,现在虽然我能够做我想做的事情 做,只有我不确定我是否以最经济的方式实现了这一目标。这是什么 我在做:
with open("./names.txt","r") as names:
names = list(map(lambda x: x.rstrip(),names)
planets.insert(sorted(names).index
(list(filter(lambda x: x not in planets, names))[0],
list(filter(lambda x: x not in planets, names))[0])
print(planets)
我的问题似乎从上次改变了,我现在基本上是在创造 两个列表,排序一个以查找非行星的排序位置,然后然后 将非行星插入未找到的行星列表中它将找到的索引 如果行星列表已经排序,它本身就可以了。
我现在可以做一些事情,而不是创建2个列表,python提供 内置组件中可以做到这一点的任何事情?
答案 0 :(得分:2)
如果我理解正确,你想要排序非行星列表而不是行星列表。如果是这种情况,您可以轻松拆分为两个列表,然后对非行星列表进行排序并将其与行星列表合并。
planet_lists = [...]
with open('./names.text', 'r') as name_file:
names = map(lambda name: name.strip(), name_file.readlines())
non_planet_lists = filter(lambda name: name not in planet_lists, names)
result_list = sorted(non_planet_lists) + planet_lists
答案 1 :(得分:2)
列表推导
np=sorted([e for e in words if e not in planets])
p=[e for e in words if e in planets]
np+p
将行星中的非行星与给定的单词列表分开;排序非平面并与单词列表中给出的行星连接。单词可能不包括所有行星,因此也需要p。
答案 2 :(得分:1)
当您说 seek()回到流的开头再次使用名称时,您的指示是正确的。 @Kevin也说得对,当他说 names1 和 names2 是同一个对象时,你可以检查它是做一个简单的相等比较。在任何情况下,您都不需要其中任何一个,通过执行以下操作:
with open("./names.txt", "r") as names:
print(sorted(filter(lambda y: y not in planets, map(lambda x: x.rstrip(), names))) + planets)
希望这有助于