把一个词放在它的排序位置:真正的python方法

2024-05-13 03:54:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在编辑此查询,如果有人觉得我有问题,请接受我的道歉 误导他们去解决另一个问题。我有一个包含 行星的名字,像这样:

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”正好位于它所处的位置 在此列表中如果此列表已排序。我之前的印象是 我能做到,但我不能做到,我想我能做到 由于我用来测试代码的输入的特殊性 “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)

我的问题似乎已经从上次改变,我现在基本上是创造 两个列表,排序一个以找到非行星的排序位置,然后然后 在未排序的行星列表中的索引处插入非行星 如果行星列表被排序的话。你知道吗

我现在可以就地做一些事情而不是创建两个列表了吗,python提供了吗 有什么东西能做到吗?你知道吗


Tags: 列表names排序行星neptunejupitermarsmercury
3条回答

列表理解

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也是必需的。你知道吗

如果我没听错的话,你想排序非行星列表而不是行星列表。如果是这样的话,您可以轻松地将其分为两个列表,然后对非行星列表进行排序并将其与行星列表合并。你知道吗

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

如果您说必须seek()返回流的开头才能再次使用名称,那么您的回答是正确的。@凯文说的names1names2是同一个对象也是对的,你可以在做一个简单的等式比较时检查一下。在任何情况下,您都不需要它们中的任何一个,请执行以下操作:

 with open("./names.txt", "r") as names:
        print(sorted(filter(lambda y: y not in planets, map(lambda x: x.rstrip(), names))) + planets)

希望这有帮助

相关问题 更多 >