【问题标题】:How to get all permutations of string as list of strings (instead of list of tuples)?如何将字符串的所有排列作为字符串列表(而不是元组列表)?
【发布时间】:2018-07-21 15:00:40
【问题描述】:

我们的目标是创建一个单词中某些字母的所有可能组合的列表...这很好,只是它现在最终成为一个包含太多引号和逗号的元组列表。

import itertools

mainword = input(str("Enter a word: "))
n_word = int((len(mainword)))

outp = (list(itertools.permutations(mainword,n_word)))

我想要什么:

[yes, yse, eys, esy, sye, sey]

我得到了什么:

[('y', 'e', 's'), ('y', 's', 'e'), ('e', 'y', 's'), ('e', 's', 'y'), ('s', 'y', 'e'), ('s', 'e', 'y')]

在我看来,我只需要删除所有括号、引号和逗号。

我试过了:

def remove(old_list, val):
  new_list = []
  for items in old_list:
    if items!=val:
        new_list.append(items)
  return new_list
  print(new_list)

我只是运行了几次函数。但它不起作用。

【问题讨论】:

  • 附注:不要使用str("..."),“输入一个单词:”已经是一个字符串。 int(len...)) 也一样。 len 已经返回一个 int。
  • "在我看来,我只需要删除所有括号、引号和逗号。"不。您需要将元组列表转换为字符串列表。

标签: python python-3.x list tuples itertools


【解决方案1】:

您可以使用以下推导式重新组合这些元组:

代码:

new_list = [''.join(d) for d in old_list]

测试代码:

data = [
    ('y', 'e', 's'), ('y', 's', 'e'), ('e', 'y', 's'),
    ('e', 's', 'y'), ('s', 'y', 'e'), ('s', 'e', 'y')
]

data_new = [''.join(d) for d in data]
print(data_new)

结果:

['yes', 'yse', 'eys', 'esy', 'sye', 'sey']

【讨论】:

    【解决方案2】:

    您需要在字符串元组上调用 str.join() 才能将其转换回单个字符串。您的代码可以使用 list comprehension 简化为:

    >>> from itertools import permutations
    >>> word = 'yes'
    
    >>> [''.join(w) for w in permutations(word)]
    ['yes', 'yse', 'eys', 'esy', 'sye', 'sey']
    

    或者您也可以使用map() 来获得所需的结果:

    >>> list(map(''.join, permutations(word)))
    ['yes', 'yse', 'eys', 'esy', 'sye', 'sey']
    

    【讨论】:

      【解决方案3】:

      您可以使用连接功能。下面的代码完美无缺。 我还附上了输出的截图。

      import itertools
      
      mainword = input(str("Enter a word: "))
      n_word = int((len(mainword)))
      
      outp = (list(itertools.permutations(mainword,n_word)))
      
      for i in range(0,6):
        outp[i]=''.join(outp[i])
      
      print(outp)
      

      【讨论】:

      • 我可能会补充一点,最好使用列表中 len 的范围,而不是仅使用 6,因为主词可以有更多或更少的字母。
      • 是的,您应该使用 len() 函数。我只是给出主要逻辑。由你决定让它通用!顺便说一句谢谢?
      猜你喜欢
      • 1970-01-01
      • 2013-01-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-17
      • 2023-03-04
      • 1970-01-01
      相关资源
      最近更新 更多