我正在写我的第一个节目。我一直在使用python3这样做。我遇到了一个我认为非常基本的问题我找不到任何地方讨论的答案,或者我可能只是看得太密集了。谢谢你对我缺乏经验的耐心。
组合('gimp',2)返回
[('g', 'i'), ('g', 'm'), ('g', 'p'), ('i', 'm'), ('i', 'p'), ('m', 'p')]
我希望这些是笛卡尔坐标,所以我已经完成了这个......
(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,x) = range(17)
希望这些字母会用数字切换,但字母周围的麻烦(')会阻止这些。
如何让列表更像?
[(g,i),(g,m)...]
我尝试过没有运气的替换功能
combo.replace("'","")
或者如果有一种更直接的方法可以将字母组合列表转换为坐标,我很乐意知道它。
提前感谢您的帮助。
答案 0 :(得分:0)
从Python中的另一个新手,你可以创建一个字母,其中字母为键,选择的数字为每个字母的值,并为每个字母提取一个数字。
#1 make a dict
prefValues = {'g' : 1, 'i' : 2, 'm' : 3, 'p' : 4}
#2 make a list
word = []
for char in 'gimp':
#if the letter is in the dict
if char in prefValues:
#append in the list the corresponding value
word.append(prefValues[char])
现在你继续为笛卡尔坐标生成元组。如果您无法从列表中生成配对,请查看此答案Pairs from single list
答案 1 :(得分:0)
谢谢stef和apalala的帮助。我无法实现您的解决方案,但它确实帮助我想象出一个我能够工作的不优雅的解决方案。我想在这里发布我的解决方案,以防有人像我一样的编码敏锐度可能会发现它很有用。
我所做的是检查我对每种可能组合的组合列表,如果有组合,我扩展了一个新的坐标列表和相应的数字。我认为这就是上述解决方案将以更有效的方式产生的结果。我的目的只包括120种可能的组合,所以虽然乏味,但这种方法是可行的。
combo = (list (combinations (abcdefghijlmnop, 2))
cords = []
if ('a','b') in combo:
cords.append ((0,1))
else:quit
然后我重复了(a,c)(a,d)等的最后三行。
答案 2 :(得分:0)
您可能希望尝试使用字符的序号值。如果您使用“a”的序数值中字符的序数值的偏移量,则应获得适当的坐标。
尝试类似:
from itertools import combinations
word = "gimp"
coords = [(ord(x) - ord('a'), ord(y) - ord('a')) for x, y in combinations(word.lower(), 2)]
这会将coords
设置为:
[(6, 8), (6, 12), (6, 15), (8, 12), (8, 15), (12, 15)]
注意:如果您在单词中使用非ASCII字符,这将无法正常工作。