質問するログイン新規登録

回答編集履歴

2

追記

2018/04/03 23:39

投稿

hayataka2049
hayataka2049

スコア30939

answer CHANGED
@@ -24,4 +24,21 @@
24
24
  ...
25
25
  >>> print(result)
26
26
  ['tera-tail', 'Tera-tail', 'tEra-tail', 'TEra-tail', 'tera-Tail', 'Tera-Tail', 'tEra-Tail', 'TEra-Tail']
27
- ```
27
+ ```
28
+
29
+ ### 更に追記
30
+ 上のコードがなんだかすっきりしていなかったので、見た目が綺麗な処理方法を考えました。
31
+ ```python
32
+ >>> string = "tera-tail"
33
+ >>> lst = ["t", "e"]
34
+ >>> result = [""]
35
+ >>> for c in string:
36
+ ... if c in lst:
37
+ ... result = [s+c for s in result] + [s+(c.upper())for s in result]
38
+ ... else:
39
+ ... result = [s+c for s in result]
40
+ ...
41
+ >>> print(result)
42
+ ['tera-tail', 'Tera-tail', 'tEra-tail', 'TEra-tail', 'tera-Tail', 'Tera-Tail', 'tEra-Tail', 'TEra-Tail']
43
+ ```
44
+ 性能面で課題があるかもしれません。

1

追記

2018/04/03 23:38

投稿

hayataka2049
hayataka2049

スコア30939

answer CHANGED
@@ -5,4 +5,23 @@
5
5
  >>> "".join([c.upper() if c in lst else c for c in string])
6
6
  'hOGehOGehOGe'
7
7
  ```
8
- こんな感じでどうでしょう。
8
+ こんな感じでどうでしょう。
9
+
10
+ ### 追記
11
+ 質問文のコードを見直して、もしかして可能な変換をすべて列挙したかったのかと気づきました。
12
+ 書き方は色々あると思いますが、一例を示しておきます。素直に書いたつもりですが、あまりすっきりはしていないかもしれません。
13
+ ```python
14
+ >>> string = "tera-tail"
15
+ >>> lst = ["t", "e"]
16
+ >>> char_pos = [i for i, c in enumerate(string) if c in lst]
17
+ >>> def int_to_bool(num, base):
18
+ return [bool(num & (1<<n)) for n in range(base)]
19
+ ...
20
+ >>> result = []
21
+ >>> for i in range(2**len(char_pos)):
22
+ ... bool_lst = int_to_bool(i, len(char_pos))
23
+ ... result.append(("".join([(c.upper() if bool_lst.pop(0) else c) if i in char_pos else c for i, c in enumerate(string)])))
24
+ ...
25
+ >>> print(result)
26
+ ['tera-tail', 'Tera-tail', 'tEra-tail', 'TEra-tail', 'tera-Tail', 'Tera-Tail', 'tEra-Tail', 'TEra-Tail']
27
+ ```