質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.85%

  • Python 3.x

    4461questions

    Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

ある数値を関数で変換した新たな数値を、桁ごとにリスト化したい

受付中

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 86

yosshi

score 3

 前提・実現したいこと

1を2個、0を10個並べた順列を、2つの1の現れる項の小さい順にナンバリングしたうえで、それを用いて、ナンバリングした数字を打ち込めば順列の配列ができるようにしたい。
例えば、
1を入力したときに、110000000000を対応させて、lを[1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]という配列になるようにしたいのです。
また、12を入力したときには、011000000000を対応させて、lが[0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0]という配列になるようにしたい。

 発生している問題・エラーメッセージ

Please Enter Number1
Traceback (most recent call last):
  File "enzan3.py", line 11, in <module>
    l = [int(x) for x in list(str(n))]
  File "enzan3.py", line 11, in <listcomp>
    l = [int(x) for x in list(str(n))]
ValueError: invalid literal for int() with base 10: '<'

 該当のソースコード

import numpy as np
m = input("Please Enter Number")
for m in range(1, 12):
    def n(m):
     10**12+10**m

for m in range(12, 22):
    def n(m):
     10**11+10**m

l = [int(x) for x in list(str(n))]
#(以下略)

 試したこと

定義の時点でintやstrを入れてみましたがダメでした。

 補足情報(FW/ツールのバージョンなど)

Python3.6

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • LouiS0616

    2018/06/02 12:36

    どのようなルールで『変形』したいのか、説明を追記してください。

    キャンセル

回答 2

+1

やりたいのはこんなんですかね。質問がよくわからないので当てずっぽうですが。

mylist_1 = [10**12+10**m for m in range( 1, 12)] # リスト内包表記を使った
mylist_2 = [10**11+10**m for m in range(12, 22)] # 同上

mylist = mylist_1 + mylist_2 # リストの連結

追記

def func(m):
    return 10**12+10**m

m = 1
num = func(m)
l = list(str(num))

# もしくは

l = list(map(int, l))

もっと追記

def func(i, j):
    mylist = [0]*12
    mylist[i], mylist[j] = 1, 1
    return mylist

mylist = []
for i in range(2):
    for j in range(i+1,12):
        mylist.append(func(i, j))

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/06/02 13:23

    ありがとうございます。
    質問が分かりにくくて申し訳ないです。どう表現したらいいのかがよくわからなくて......。
    具体的には、
    1を入力したときに、110000000000を対応させて、lを[1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]という配列になるようにしたいのです。
    また、12を入力したときには、011000000000を対応させて、lが[0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0]という配列になるようにしたいのです。

    キャンセル

  • 2018/06/02 13:29

    追記しましたが、こういうことですかね?一番上の桁が0の場合も考えますか?

    キャンセル

  • 2018/06/02 13:33

    ありがとうございます。 そういうことです。
    mが1から11までの自然数の時、m=1と同様な処理を行い、12から21までの自然数のときは、011000000000のような1番上の位が0となる形で1対1対応させていきたいです。

    キャンセル

  • 2018/06/02 13:51

    下12桁だけを取り出す、ということですか?

    キャンセル

  • 2018/06/02 13:58

    1が2個、0が10個の順列で、1が出てくる項が早い順にナンバリングしたいんです。
    1:110000000000
    2:101000000000
    3:100100000000
    ……
    11:100000000001
    12:011000000000
    13:010100000000
    ……
    21:010000000001
    22:001100000000
    ……
    のような形で

    キャンセル

  • 2018/06/02 14:09

    目的のことをやるためだけのスクリプトに直しました。最初のrange(2)をrange(11)までやれば最後まで順列は取れます。

    キャンセル

  • 2018/06/02 14:18

    もっと追記のほうを試してみました。
    1項目か2項目に1が存在する全ての配列は出てきたのですが、これをナンバリングするにはどうしたらよいのでしょうか。
    辞書を定義してそこから引っ張ってくるのが一番確実なんですかね?

    キャンセル

  • 2018/06/02 14:19

    あっ、ごめんなさい。 うまく更新されてなかったので最新のAが出てきていませんでした。
    試してみます。

    キャンセル

  • 2018/06/02 14:20

    ありがとうございます。

    キャンセル

  • 2018/06/02 14:29

    外側のmylistの並びがナンバリングの順序そのものなんですが、別のキーを当てたい場合はdictにしてもいいかもしれませんね。

    キャンセル

0

defは関数の定義であって呼び出しではないので、そのコードで関数を定義している意味はありません。というか、意図通り動いていません。

エラーの原因はlist(str(n))が何になっているか確認してみるとわかります。

>>> def n():
...     pass
... 
>>> str(n)
'<function n at 0x7f5161ae1f28>'
>>> list(str(n))
['<', 'f', 'u', 'n', 'c', 't', 'i', 'o', 'n', ' ', 'n', ' ', 'a', 't', ' ', '0', 'x', '7', 'f', '5', '1', '6', '1', 'a', 'e', '1', 'f', '2', '8', '>']

str(func)で関数オブジェクトを表す文字列が返るので、それを変換しようとしてしまっています・・・。

 追記

for m in range(1, 12):
   def n(m):
    10**12+10**m
for m in range(12, 22):
   def n(m):
    10**11+10**m


これは関数の定義ではなく、for文の中で関数を定義しているだけです(しかもreturnもしていないから無意味な関数だし・・・)。for文を回している意味もないし(何回定義しても最後に定義されたものしか残らないし、そもそもforで値が束縛されるmと仮引数のmとが別物なので意味ないとか、それ以前にnを呼び出していないとか・・・)、何がしたいのかよくわかりません。

 追記2

1つずつ加算で計算するコードはなんか書けました。

def incr_enzan(lst):
    result_lst = lst[:]
    if lst[-1] != 1:
        first_one_passed = False
        for i, x in enumerate(lst):
            if x == 1 and not first_one_passed:
                first_one_passed = True
            elif x == 1 and first_one_passed:
                break
        result_lst[i] = 0
        result_lst[i+1] = 1
    else:
        for i, x in enumerate(lst):
            if x == 1:
                break
        result_lst[-1] = 0    
        result_lst[i] = 0
        result_lst[i+1] = 1
        result_lst[i+2] = 1
    return result_lst


lst = [1,1,0,0,0,0,0,0,0,0,0,0]
print(1, lst)

for x in range(2, 67):
    lst = incr_enzan(lst)
    print(x, lst)
"""
1 [1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
2 [1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0]
3 [1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0]
4 [1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0]
5 [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0]
6 [1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0]
7 [1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0]
8 [1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0]
9 [1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0]
10 [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0]
11 [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1]
12 [0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0]
13 [0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0]
14 [0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0]
15 [0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0]
16 [0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0]
17 [0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0]
18 [0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0]
19 [0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0]
20 [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0]
21 [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1]
22 [0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0]
23 [0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0]
24 [0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0]
25 [0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0]
26 [0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0]
27 [0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0]
28 [0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0]
29 [0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0]
30 [0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1]
31 [0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0]
32 [0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0]
33 [0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0]
34 [0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0]
35 [0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0]
36 [0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0]
37 [0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0]
38 [0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1]
39 [0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0]
40 [0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0]
41 [0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0]
42 [0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0]
43 [0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0]
44 [0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0]
45 [0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1]
46 [0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0]
47 [0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0]
48 [0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0]
49 [0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0]
50 [0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0]
51 [0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1]
52 [0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0]
53 [0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0]
54 [0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0]
55 [0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0]
56 [0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]
57 [0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0]
58 [0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0]
59 [0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0]
60 [0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1]
61 [0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0]
62 [0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0]
63 [0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1]
64 [0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0]
65 [0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1]
66 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1]
"""

もしかしたら式1つでn番目の項が出せるかもしれませんが、思いつかなかったので得意な人に譲ります・・・。
こういうコードで一式出して、辞書に突っ込んでおけば良いでしょう。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/06/02 12:54

    ありがとうございます。
    別のファイルに定義を書いて変形したうえで、importしてくれば良いのでしょうか。

    キャンセル

  • 2018/06/02 13:01

    別にファイルをもう一つ作る必要はないと思いますが・・・とりあえず、何をしようとしているのかちゃんと言葉で説明してくれませんか?
    あと、関数の使い方を理解していない気がするので、なんか入門記事とか探して理解してください・・・

    キャンセル

  • 2018/06/02 13:08

    1から66の自然数に対して、1が2個、0が10個の順列を1対1対応させたいのです。今回のはその一部をやりたかったのですが……。
    辞書型で66項目作るのが時間はかかりますが確実なんですかね……。

    キャンセル

  • 2018/06/02 13:14

    その説明ではわからないので、なにか具体的な入力をしたときに、どんな処理をしてlがどんなリストになっていれば良いのか、説明してください

    キャンセル

  • 2018/06/02 13:20

    例えば1を入力したときに、110000000000を対応させて、lを[1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]という配列になるようにしたいのです。
    また、12を入力したときには、011000000000を対応させて、lが[0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0]という配列になるようにしたいのです。

    キャンセル

  • 2018/06/02 13:27

    察するに、こういうことですか?
    1:110000000000
    2:101000000000
    3:100100000000
    4:100010000000
    5:100001000000
    6:100000100000
    7:100000010000
    8:100000001000
    9:100000000100
    10:100000000010
    11:100000000001
    12:011000000000

    キャンセル

  • 2018/06/02 13:29

    そういうことです。
    それを66まで1対1対応させたうえで、配列に直したいです。

    キャンセル

  • 2018/06/02 13:37

    1-11
    12-22
    23-33
    34-44
    45-55
    56-66
    66までというのは、の6区間は考えるということですか?

    キャンセル

  • 2018/06/02 13:53

    いえ
    1-11で1項目に1がある配列
    12-21で1項目が0で2項目に1がある配列
    22-30で1項目と2項目が0で3項目に1がある配列
    ……という感じにしていきたいのです。
    つまり1が早く出てくる順番にナンバリングしたいです。

    キャンセル

  • 2018/06/02 13:55

    ああそうか、区間が狭くなっていくんですね
    ・・・面倒くさいな、どうやって実装したものか

    キャンセル

  • 2018/06/02 14:00

    66通り全て辞書に入れてしまって、そこから引っ張ってくるのが確実なんですかね……?

    キャンセル

  • 2018/06/02 14:03

    私ならそうする気がします

    キャンセル

  • 2018/06/02 14:07

    ありがとうございます。試してみます。

    キャンセル

  • 2018/06/02 14:09

    いちおう自動で出せるようにはしたので、追記してみました

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.85%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 解決済

    pythonのエラー

    testThreadが見つからないというメッセージが出てきたのですが、どこに問題があるのでしょうか? よろしくお願いします コード #-*- coding utf-8-*-

  • 解決済

    Pythonのthreadingにおける、終了時の処理

    前提・実現したいこと Pythonを使って、動画や画像を表示するGUIを作っています。その中で、みなさまのご支援を頂ながらカメラの画像を取り込んで再生できるところまで来ました。

  • 解決済

    outputがでず、困っています。

    下記の質問で、outputを出そうとするとエラーになってしまいます。解決方法をご存知でしょうか。 ifname=="main":の後に、エラーがでてきます。。 A user

  • 解決済

    pythonのスライスについて

    a = b[:,0] このようなコードがあったとき、どのようなことがおこなわれますか? bはこのコードがなりたつ何かだとすると なにだったら成り立ちますか? すみません、間

  • 解決済

    python 文字列を判定する方法

    何らかのstr型が連続して格納されている配列(例['100'],['.'],['abc'])の各要素を判定し、数値ならint型に変換後次要素の判定に移る、数値ではないのであればfa

  • 解決済

    競技プログラミングの問題(Python)

    下記のプログラミングの問題を解きました。 プログラミングの問題 みなさんはPythonでこの問題をどのように解きますか? 僕は以下のように解きました。 ぜひみなさんの解答を参考にさ

  • 解決済

    python for文

     前提・実現したいこと pythonでプログラム作成をしております。 簡易プログラムは以下です。 for k in all x = str(a) return x if n

  • 解決済

    Python 3.x 辞書のキー値によって変換する場合の高速化

    Pythonにて、辞書(dict({key,value})を使って、list型の全要素をValue値に変換する際の、 高速化が可能かどうかをご教授いただきたいです。 dict1

同じタグがついた質問を見る

  • Python 3.x

    4461questions

    Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。